Tag: Python
Python入門書のデファクトスタンダードが4年ぶりに大改訂。近年、Pythonの利用が、機械学習、AIなどの科学技術分野へ大きく広がっている現状を踏まえて、細部にわたり加筆、修正した。
Pythonという言語の仕様やその特徴的な機能、標準ライブラリでできることを中心に扱うため、分野を問わず活用していただけます。
文字列str型のメソッドにもformat()がある。
文字列に%演算子を使います。 formatted_msg = 'Hello %s' % str
文字列リテラル'...', "..."の前にrまたはRをつけると、エスケープシーケンスを展開せずそのままの値が文字列となる。このような文字列はraw文字列(raw strings)と呼ばれる。
(バイナリモードでオープンされた)ファイルやソケットから読み込んだデータはそのままだとバイト列なので、unicode文字列に解釈してあげないと文字単位の操作がうまくできません。 バイト列をエンコーディングを指定してunicode文字列として解釈するためにはdecode()メソッドを使います。
re.match(), re.sub()などの関数と同様の処理が、正規表現オブジェクトのメソッドmatch(), sub()として実行できる。
URLを正規表現のパターンとして表す時、下記のようになる。 https?://[\w/:%#\$&\?\(\)~\.=\+\-]+”
re.findall()は、マッチするすべての部分を文字列のリストとして返す。その要素数(組み込み関数len()で取得)がマッチした部分の数となる。
引数ensure_ascii=Falseとすると、Unicodeエスケープされない。日本語の全角文字などがそのまま出力される。
入出力用のimport jsonが入っているので,別ライブラリのインストールは不要です.
例えば、dictを継承して属性が有るかのように振る舞うクラスを定義する方法があります。
'utf_8_sig' と指定する。
レコードの何番目の値について並べ替えするかを簡単に指定できるモジュール operatorの関数 itemgetter() を使ってレコードを並べ替えることができる。
defaultdict を生成する際に関数やクラスなど callable なオブジェクトを渡すと、キーが見つからなかった場合にそのオブジェクトが呼び出されます。
pathlibモジュールが提供するPathクラス、PurePathクラスなどを使って、ファイルやディレクトリを扱う方法を紹介する。
withブロックを使うとブロックの終了時に自動的にクローズされる。閉じ忘れがなくなるので便利。 with open(path) as f: print(type(f))
引数exist_okをTrueとすると既存のディレクトリを対象としてもエラーにならない。 pathlib.Path('temp/dir').mkdir(exist_ok=True)
拡張子はsuffilx属性で取得できる。ピリオド.付きの文字列となる。
今回はファイル名でソートされた状態で順番に読み込みたかったので解決法を調べました。 file_list = sorted(glob.glob('path/to/dir/*.txt'))
冷静になって考えると「その程度の用途なら urllib.request で十分では」と思うことは少なくない。
株の情報がCSVファイルとして公開されていますので、そこのスクレイピングを記事にしていこうと思います。
バージョンは、Python3です。
少し邪道感ありますが、データ仕様(タイムゾーンが何か)を確認した後に文字列結合してしまうのが楽ちんです。
datetimeだけでも目的の変換は達成できました。 datetimeだけを使ってUTCからJSTへの変換を行うコードは以下になります。 datetime_jst = datetime_utc.astimezone(datetime.timezone(datetime.timedelta(hours=+9)))
JST/UTC変換を行う 上記の機能を用いることで、いろいろなタイムゾーンで、日付を表現できます。
Pythonのunittest機能の使い方を簡単に記録したメモである。
いくつかのパッケージの構成を見た限りでは、パッケージのディレクトリと同じ階層にテストディレクトリを作るのがセオリーらしい。
標準ライブラリであるpprintモジュールを使うと、リスト(list型)や辞書(dict型)などのオブジェクトをきれいに整形して出力・表示したり、文字列(str型オブジェクト)に変換したりすることができる。
チュートリアルでは「logging.debug()やprintでログ出力できるよ」というひと通りの説明をした後に、より適切なベスト・プラクティスが書かれている
Pythonの関数を呼び出す時に渡す引数と、 その関数の戻り値のログ出力をデコレータで部品にしてみました。
この記事にはpython3でsqlite3を操作して、データベースの作成や、編集の基礎的なことをまとめてます
csvファイルでデータをもらった後、軽量なデータベースであるsqlite3にデータを移しました。
取得した株データのCSVファイルをSQLiteに格納するプログラムを紹介します。
Get column names from Sqlite database table in Python
sqlite3.Rowを使用するとSELECT結果をカラム名で指定して取得することができます。コネクションオブジェクトのrow_factoryにsqlite3.Rowを設定します。
MySQL公式パッケージ mysql-connector-python-rf がどうも良さそうである
mysql-connector-python-rf は更新が止まっており、同じく MySQL 公式の mysql-connector-python というパッケージがあるらしいので注意
関数名/変数名 ・英小文字を使用し、可読性を高めるときには単語間をアンダースコアでつなぐ
本記事では個人的な解釈をしつつ、PEP8について読み解いてまとめてみます
sphinx対応的に、書くとしたらNumPyかGoogleのスタイルどちらかがいいかな、という印象です。
Python Docstringとは Pythonにおけるクラスや、メソッド(関数)についての説明を記載したコメント文のこと。
関数前に一つアンダースコアを付ける事により、関数を”内部用”に定義できます。
これは、繰り返しではなくて、新しいリストを生成する。繰り返しじゃない。 パッと見、そうとう不思議な構文。for文とはまったく関係がない。基本的な構文は次のようになる [ 式 for 変数 in オブジェクト ]
pythonには後置if文がありませんが、リスト内包表記に限っては(結果的にですが)書けます。
assert 条件式, 条件式がFalseの場合に出力するメッセージ
assert(1 == 2, 'This should fail') この問題は、空ではないタプルがPythonでは常に真と評価されることと関係しています。
assert(1==2, "hi") is parsed as assert (1==2, "hi"), which doesn't give an error because a non-empty tuple (False, "hi") isn't a false value, and there is no second parameter supplied to the keyword.
コンストラクタは__init__()という名前で定義します。"_"を前後に2つです。
vars(obj)は、objを辞書として扱ったときの値を返していると解釈できそうです。 dir()関数の使用用途としては、プログラマが対話的にオブジェクトが持つ属性の一覧を覗いて、使えそうなものを探ることのようです。
それに従って自作関数のファイルが多くなってしまい管理が難しくなってしまいます.ここで登場するのがパッケージ化です.
絶対パスを取得した後であれば、以下のようにしてsrcディレクトリ内のモジュールをimport可能。
1. __init__.py は、モジュール検索のためのマーカーとなる。
os.systemを使うのが従来は一般的であったが,subprocessを使うのが現代的らしい.
変数iを「_」(アンダースコア)に書き換えています。このアンダースコアは、「使わない変数」であることを表します。
Pythonのdotenvは,python-dotenvと少し名前が違っている.
python-docx is a Python library for creating and updating Microsoft Word (.docx) files.
構造を見ると、paragraphはDocument直下にあるだけでなく、tablesの中にもある
今回紹介する tqdm は、走らせた処理の進捗状況をプログレスバーとして表示するためのパッケージ。
os.path VS pathlib 早見表
The library wraps the svn commandline client, which should consequently be installed on the local system.
ログメッセージとともにファイル名や時間を表示する
difflibは文字列比較のために使うPython標準モジュールです。
difflibモジュールのndiffメソッドで実現できる。
普段別言語がメインが、急遽Pythonプロジェクトを作る必要があり、下記の要件がある人向けです