Python3関連のことを調べてみた2022年02月23日

Python3関連のことを調べてみた2022年02月23日

Pythonで複数入力(無限入力)を実行する方法

“`python:test.py
for l in sys.stdin:
lines.append(l.rstrip(‘\r\n’))
“`

上記のようなコードでは、

“`
python test.py
“`
のように実行しても無限に入力を受け付けてしまい、最後まで実行できませんでした。

解決策は下記の通りです。

“`
echo “test1.txt” “text2.txt” | python test.py
“`

参考:https://stackoverflow.com/questions/43554363/how-to-run-code-with-sys-stdin-as-input-on-multiple-text-files

元記事を表示

PythonでDependency Injectionを実装する

備忘録としてDependency Injectionの基礎知識とPythonでの実装方法を整理します。

## 環境
– Python 3.8.10

### DIとは?

“` Dependency Injection“` の略です。具体的に言うと、クラスAで利用するインスタンスをクラスAの内部で生成するのではなく、抽象に依存させて外部から渡すことです。

サンプルコードを見てみましょう。

#### 悪い例

“`main.py

class Cat():
def __init__(self, name: str):
self.name = name

def cry(self):
print(f'{self.name} cry meow meow.’)

class A():

cat1 = Cat(“ハチワレ”)

def action(self):
self.cat1.cry()

if __name__ == “__main__”:
a = A()

元記事を表示

Pythonでソート

#並べ替えたい

##sortを使う
###昇順
“`python:
l = [1, 2, 3, 5, 4, 8]
l.sort()
l
“`
“`
[1, 2, 3, 4, 5, 8]
“`
###降順

“`
l = [1, 2, 3, 5, 4, 8]
l.sort(reverse=True)
l
“`
“`
[8, 5, 4, 3, 2, 1]
“`
sort()はタプルに対しては使えない。sort()を使うと元のリストが書き換えられる。

##sortedを使う
“`python
l = [2, 1, 3, 5, 4, 8]
sorted(l), l
“`
“`
([1, 2, 3, 4, 5, 8], [2, 1, 3, 5, 4, 8])
“`
元のリストはそのまま。sorted()は文字列やタプルを引数にできるが、返すのはリスト。

##itemgetterでリスト内のリストを並べ替え
“`python
from operator import itemgetter

ll = [[“acd”, 123, 456], [“bfe”, 23

元記事を表示

【streamlit】streamlit helloを実行してブラウザで動かす方法

#はじめに
streamlit hello を実行してブラウザで動かす方法について記事にしています。

#環境
Windows10
Python3.9

#streamlit hello の実行方法
1. コマンドプロンプトを起動します。
2. streamlit hello と入力して、Enterを押します。
![streamlit001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/827fce32-6822-89e8-01de-4ee8e1a12404.png)
3. ブラウザを起動します。
4. ブラウザのアドレスバーに http://localhost:8501/ を入力します。
5. 以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/00f2b1f9-e434-11ea-4631-e3f1b76701ce.png)

#stream hell

元記事を表示

個人的メモ

#itertools

“`python:itertoolsでbit全探索
from itertools import product

for pro in product((0, 1), repeat=n): #長さnの各要素が0か1のタプルを返す=bit全探索で便利
print(pro)
“`

#

元記事を表示

【streamlit】streamlit hello で コマンドとして認識されていないというエラーが出たときの対処法

#はじめに
streamlitをやり始めたときに、遭遇したエラーの解決方法です。

#環境
Windows10
python3.9

#streamlitをインストールします。
“`
>pip install streamlit
“`
#streamlit helloを実行します。
“`
>streamlit hello
“`
ここでstreamlitは内部コマンドまたは外部コマンドとして認識されていませんというエラーが出ました。

#streamlitにPATHを通します。
1.pip installでstreamlit.exeがインストールされているディレクトリを見つけます。
私の場合は、C:\Users\hogehoge\AppData\Roaming\Python\Python39\Scripts\streamlit.exe にいました。

2.PATHを通します。
・STARTボタンを右クリック⇒システム⇒システムの詳細設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

繰り返し使って星のらせん描いてみた。

## 亀が動くアレ作ってみた
「Pythonではじめる数学の冒険」の課題1-6の答えです。
関数(star)を最初に作って、その後にそれをループ(starSpiral)させるのですが、ずっとstarSpiralを先頭にしてしまっていたのでうまく行きませんでした。
length+=の部分や変数をあらかじめ設定しておく部分は注意です。
やっと正解にたどり着いたので備忘録的に共有。

“`python
from turtle import *
shape(‘turtle’)
speed(10)
def star(length=5):
for i in range(5):
forward(length)
right(144)
def starSpiral(length):
for i in range(60):
length+=5
star(length)
right(5)
starSpiral(5)

“`
動かすとこんな感じ。
![スクリーンショット 2022-02-23 0.21.29.p

元記事を表示

Pythonは長期間のプロジェクトの保守でも快適になるケースがあるよ、という話

先日以下のような記事を拝見しました。

https://kmizu.hatenablog.com/entry/2022/02/17/195423

「うんうん、そうだねぇ・・・」と思いつつ読んでいたのですが、ここ数年ずっとPythonばかりを書いていた身からすると少し違和感を感じるところもあったので頭の整理的に言語化しておきます。

# 前置き

本記事は元の記事を否定するものではありません。元記事で以下のように書かれている通り、元記事はあくまで「そういう傾向がある」という話ですので本記事はそういった傾向に当てはまらないPythonでの例外的なところに触れる形となります。

> これまで色々なプロジェクトを観察(風聞も含む)して来たところ、そういう傾向があるのではないかという仮説です。

本記事はなんとなくPythonだと長期プロジェクトとかコード量が多いと詰むのでは・・・?と感じられた方に対してそういったプロジェクトでも(条件次第で)快適に開発を続けられるよ、と宣伝するためのものです。

逆に本記事に対して強い違和感を感じられる方もいらっしゃると思います(あくまで個人の所感となります

元記事を表示

celeryタスクをネットワーク越しにフローとして実行する

### 概要
– [celery](https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html)タスクを以下の観点で実行してみた。
– 「ネットワーク越し」に呼び出す
– さらに「複数個順番」に呼び出す
– さらに「成功時/エラー時のcallback用タスクも指定」して呼び出す


### 前提
– 環境
– python: v.3.7.7
– pip install
– celery: v.4.4.7


### celeryタスクをネットワーク越しに呼び出す

以下のタスクが定義されているとする。

“`python
import time
@app.task(name=”test”, bind=True)
def test(self, arg1):
time.sleep(5)
res = arg1 + 1
print(“test called. Result is :” + res)
return re

元記事を表示

pyenv-winで対応していないバージョンのPythonをインストールする方法

# 1. はじめに
急な話ですが、2021年10月にPython3.10がリリースされましたね!(今更感がありますが…)
個人的には新機能の構造的パターンマッチング(C言語でいうswitch文みたいなやつ)が気になっており触ってみたいと思っていました。
私はWindows環境でPythonを使用する際はpyenv-winを使っているので、さっそく pyenv install -l コマンドでバージョンの一覧を確認!
※今回の記事では、pyenvの基本操作の説明はスキップします。ご了承ください…m(_ _)m

“`python
# まずはpyenvのバージョンを確認!!
> pyenv –version
pyenv 2.64.11

# pyenv install -l を実行
> pyenv install -l
3.10.0a1-win32 # Python3.10は、ここから
3.10.0a1 # ↑
… # |
3.10.0b2-win32

元記事を表示

Python マルチスレッドで同一サイトにHTTPリクエストするときのスクレイピングTip

# 結論

あ、リクエスト用のスレッドつくればいいのか(汗
記事書きながら思いついた。ありがとうQiita。

# はじめに

マルチスレッドでスクレイピング処理をしているときに、同一サイトで短時間多重リクエストしでかしそうになったので予防方法をメモする(別スレッドでリクエストするとスリープの意味をなさないので)

# 方法

リクエスト前後でスレッドをロックする

ロッククラスは以下の通りなので別スレッドから自由にロック、アンロックできる
>プリミティブロック (primitive lock) オブジェクトを実装しているクラスです。スレッドが一度ロックを獲得すると、それ以後のロック獲得の試みはロックが解放されるまでブロックします。どのスレッドでもロックを解放できます。

https://docs.python.org/ja/3/library/threading.html#threading.Lock

“`python
import time
import threading
import requests

lock = threading.Lock()

def htt

元記事を表示

stop-processコマンドがプロセスが止まっていた原因だった話

Windows環境でクロームが重いのでPowerShellで時々

“`
ps -Name *chrome* | stop-process
“`
をよくやる。そしてPythonでも

“`
os.system(‘powershell -Command “ps -Name *chrome* | stop-process”‘)
“`

“`
subprocess.Popen(‘powershell -Command “ps -Name *chrome* | stop-process”‘)
“`

を使っていた。
ところがある日、自動処理が止まっていることを発見。
原因がこのコマンドであることにやっと気付いた。ハマった状況の蓋を開けてみると

“`
次の項目に対して Stop-Process 操作を実行しますか
“`
という確認が出て応答待ち、ペンディング状態だったのだ。

-Forceをつけたコマンドなら待たない。

“`
powershell -Command “ps -Name *chrome* | stop-process -Force”
“`
解決した。

元記事を表示

TRPGログをmarkdownにするプログラムをつくった

# こんなものを作りました

https://github.com/msattova/trpgLOG2md

やってることは非常にシンプルです。ざっくり説明するとこんな感じ。

1. HTMLファイルを読み込む

1. `

`タグの内側の文字列(HTMLタグ込み)を検索して全部取得
1. 取得した文字列から``タグの内側の文字列(HTMLタグを含まない)を取得
1. それぞれの文字列を適宜markdownの文法で装飾したりしなかったりの処理をする
1. 処理した文字列をoutputディレクトリ内に.mdファイルとして出力

# なんでこんなものを?

私はHUGOで生成した静的サイト上でTRPGのログを公開しようと考えていました。
[この記事](https://qiita.com/msattova/items/8695ac914d2ee2638e38)にその時やった試行錯誤が書いてあります。

その記事を書いていたときはHTMLファイルの状態で公開しようと考えていたのですが、既存のログコンバーターではあまり満足できず、かと言って自作するのもデザインや機能面での悩みが多く

元記事を表示

Effective Pythonまとめ 1. Pythonic Thinking (Item1~Item10)

Pythonのコーディング力を引き上げるために、[Effective Python Second Edition(英語版)](https://www.amazon.co.jp/dp/B07ZG18BH3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)を用いて学習しています。
(日本語版は訳が機械的でわかりづらいというレビューが多かったので、英語版を利用することにしました。)
今回は、第一章のPythonic Thinking (Item1~Item10まで)について、学習の備忘も兼ねて要点をメモしていきます。

:::note warn
個人的に解釈した内容を記述しているため、本の内容と厳密には一致しない表現が含まれることにご注意ください。
:::

# Item1: Know which version of Python You’re Using
pythonのバージョンを確認する方法は2種類ある。

### `–version`フラグによる確認

“`
$ python –version
Python 2.7.16

$ pyt

元記事を表示

エクセル在庫管理やめたいのでpythonでブラウザ用在庫管理ウェブアプリを作ってみる1

##エクセルで在庫管理やめたい!

親の会社が大阪、東京、兵庫、通販の4つの場所で商売展開することになった。
在庫管理はエクセルでやってドロップボックスで同期させてたけど毎回手動でファイルの複製をしたり、ファイルの破損とかでだるいのでリアルタイム同期する必要が発生。お金はないので業者に頼むなら勉強も兼ねてまず俺がやってみたら良くね?タダだから失敗してもいいし何より暇なので。

ということでブラウザで在庫管理したい!

始めた時はおもちゃ算数プログラミングしかしたことないのでインターネット何も分からないンゴ。状態です。
ググっても「在庫管理システムはムズイ」とかばっかで、なんか、「ああ、業者が高い金巻き上げてるから企業秘密的な?誰も情報出さんのかな」と思った。知らんけど。そんな気がする。

##これが使えたらうれしい人はどんな人?
これを使えたらうれしいのは4人以上で在庫管理する人全員です。エクセル在庫管理は3人以下単拠点でメリットがある(証明略)のでそれ以外の人はエクセルをやめましょう。

##使う言語、ライブラリと理由
使うのはpython3,flask,sqlite3,jinja2

元記事を表示

PyPika の Query、Table の基本的な使い方

# PyPika とは
[kayak/pypika](https://github.com/kayak/pypika) は、 Python の SQL クエリビルダーです。本記事ではこのライブラリの中心となる Query、 Table の使い方について紹介します。

# 環境
公式に記載のサポートされている Python のバージョンは `3.6` 以上。今回使用している Python のバージョンは `3.9.10` です。 PyPika のバージョンは、`0.48.8` を使用しています。

#1. Query
名前の通り `Query` クラスを使用して SQLクエリを組み立てることができます。
以下は、 `SELECT` 文の例です。[from_](https://github.com/kayak/pypika/blob/a7b01dac790f4c6e93a961b0be26a9645fe7cf5c/pypika/queries.py#L361) メソッドを使用して組み立てることができます。実態は [QueryBuilder](https://github.com/kayak

元記事を表示

GfGa

専用計算機のメモ

# pyenv

普段のpyenvの設定(https://qiita.com/KoheiQiita/items/3fa3251046132246169a)
に、以下を加えるとうまくいく。

“`
$ echo ‘eval “$(pyenv init –path)”‘ >> ~/.bashrc
“`

参考 https://blog.serverworks.co.jp/2021/05/12/233520

# conda 周辺の試行錯誤

“`
$ nano /home/nbody06/.pyenv/pyenv.d/exec/pip-rehash/conda
“`

/home/nbody06/.pyenv/bin

“`
$ nano ~/.pyenv/shims/conda
“`
これらを編集すると、以下のエラーが出る。

“`
$ conda info –envs
File “/home/nbody06/.pyenv/pyenv.d/exec/pip-rehash/conda”, line 7
[ -n “$PYENV_DEBU

元記事を表示

Python で COVID-19 のコロプレス図を作成する

# はじめに
簡単なコロプレス図を作りたいと思ったときに、いろいろと調べたので備忘録代わりに記録しておく。コロプレス図のカラーバーをつけるのに少し工夫が必要だった。もしもっと簡単にできる方法をご存じの方が居ましたら是非コメント下さい。以下、参考サイト。

– cartopy の使い方
– [cartopy official document](https://scitools.org.uk/cartopy/docs/latest/index.html)
– [Cartopyで地理データを可視化する1](https://metpost.hatenablog.com/entry/2015/11/05/180006)
– コロプレス図の作成方法について
– [14.6. Manipulating geospatial data with Cartopy](https://ipython-books.github.io/146-manipulating-geospatial-data-with-cartopy/)
– カラーバーの作成方法について
– [matplotlibでカラーバー

元記事を表示

[Django / python3] ZoneInfoNotFoundErrorの対策

# 概要

Djangoの管理画面を開こうとしたら、以下のエラーが発生した。

“`bash
backports.zoneinfo._common.ZoneInfoNotFoundError: ‘No time zone found with key Asia/Tokyo’
“`

むむむ、今までは発生してなかったんだが~( ˘·ω·˘ ).。oஇ

# 環境

||type / version|
|:-|-:|
|OS|wsl2 (Ubuntu)|
|Python|3.8.9|
|Django|4.0.2|
|backports.zoneinfo|0.2.1|

# 対策

pip moduleの`tzdata`をインストールした上で、Djangoアプリケーションを再起動してあげれば大丈夫でした。

# 原因について

エラーの発生原因になっている[zoneinfoの公式ドキュメント](https://docs.python.org/3/library/zoneinfo.html#data-sources)によると、zoneinfoは、データベースかもしくは`tzdata`からt

元記事を表示

sklearn.feature_extraction.textのvectorizerで日本語の単語ngramを生成する

# 概要
`sklearn.feature_extraction.text`のvectorizerで日本語の単語ngramを生成しようとして苦戦したのでメモ。

結論としては、vectorizerの引数で、`tokenizer=lambda x: mecab.parse(x).strip().split()`(mecabはMeCabの分かち書きTaggerオブジェクト)としたうえで、`ngram_range=(3,3)`などと指定すればよい。分かち書き関数を`analyzer`ではなく`tokenizer`に指定するのがポイント。

“`Python
from sklearn.feature_extraction.text import TfidfVectorizer
import MeCab
mecab = MeCab.Tagger(“-Owakati”)

vectorizer = TfidfVectorizer(
tokenizer=lambda x: mecab.parse(x).strip().split(),
ngram_range=(3,3)
)

# 確認
d

元記事を表示

OTHERカテゴリの最新記事