プロジェクト

全般

プロフィール

操作
  • datetime
    • date year, month, day
    • time hour, minute, second, microsecond, tzinfo
    • datetime year, month, day, hour, minute, second, microsecond, tzinfo
    • timedelta days, seconds, microseconds
      • コンストラクタ引数には weeks, milliseconds 等も指定可能
      • date datetime インスタンスの差を表す
    • 注意メソッド
      • date.weekday() 曜日を int 取得 (月0,...,日6)
      • date.isoweekday() 曜日を int 取得 (月1,...,日7)
      • isocalendar() nemed tuple (year, week, weekday) を取得 (ISO 歴 の年、週番号、曜日)
        • ISO歴
          • 最初の木曜日を含む週が、その年の第1週である (その年の第1週は、1月4日を含む週である)
            • ※ 1/1 - 1/3 は、前年の最終週に含まれることがある
            • ※ 12/29 - 12/31 は、次年の第1週に含まれることがある
          • 週は1から始まり、52 または 53 までとなる
          • 曜日は 月1,...,日7
          • 例 : 2025年1月1日は水曜日なので (year=2025, week=1, weekday=3)
            • 2025年の第1週は(2024年)12/30(月)から開始している
          • 例 : 2027年1月1日は金曜日なので (year=2026, week=53, weekday=5)
            • 2027年の第1週は1/4(月)から開始している
          >>> from datetime import date
          >>> date20270101 = date(2027, 1, 1)
          >>> date20270101
          datetime.date(2027, 1, 1)
          >>> date20270101.isoformat()
          '2027-01-01'
          >>> date20270101.isocalendar()
          datetime.IsoCalendarDate(year=2026, week=53, weekday=5)  # 2027-01-01 は 2026年の第53週
          
      • strftime(format) 書式指定通りに文字列出力
        • date time datetime のインスタンスメソッド
        • date では時刻部分は 0 とみなす
        • time では日付部分は 1900-01-01 とみなされた (実験結果)
      • strptime(str, format) 書式文字列から指定文字列をパースして datetime オブジェクトを作成する
        • datetime のクラスメソッド (※ date time には同名メソッドは無い)
    • 書式コード (注意が必要なもの)
      • %y 西暦下2桁、%Y 西暦4桁
      • %a 曜日名短縮形 (Sun, Mon, ...) %A 曜日名
      • %w 曜日十進表記 (日,月,...,土 → 0,1,...,6)
        • ※weekday(), isoweekday() どちらとも異なる
      • %U 年の最初の日曜から土曜を 01 とした週番号 (新年の初日曜より前の日は 00 に属する)
      • %W 年の最初の月曜から日曜を 01 とした週番号 (新年の初月曜より前の日は 00 に属する)
      • %H 時 (00-23)、%I 時 (01-12)
      • %f マイクロ秒 (6桁ゼロ埋め)
      • %p AM, PM
      • %z タイムゾーン名 ()
      • %% 文字 %
      • ISO (ISO-8601) 互換用の書式
        • %V ISO歴の週番号
        • %u ISO歴の曜日十進表記 (月,火,...,日 → 1,2,...,7)
      • ロケールに合わせた一括コード
        • %c 日時 (年月日時分秒曜日)
        • %x 日付 (年月日)
        • %X 時刻 (時分秒)
  • 組み込み関数 sorted, reversed
    • sorted(iterable, key=None, reverse=False) iterable の要素を並べ替えた新たなリストを返す
    • reversed(object) object 要素を逆順としたイテレータを返す
  • list.sort(), list.reverse()
    • list のインスタンスメソッドで、list インスタンスを変更する破壊的操作となる
      • sort(key=None, reverse=False) key, reverse に従い並べ替える
      • reverse() 要素の並びを逆転させる (ミュータブルシーケンス一般に実装(されるべき)操作)
    • 戻り値は None
  • operator.itemgetter(), operator.attrgetter()
    • sort() sorted() 等の引数 key への活用に便利な関数
    • itemgetter(item) itemgetter(*items) []で取得できる値の取得
      • 複数指定して key に使えば、要素(イテレータ等)内の任意要素でソート順を指定できる
    • attrgetter(attr) attrgetter(*attrs) .(ドット)で取得できる値の取得
      • 複数指定して key に使えば、要素(属性持ちオブジェクト)内の任意属性でソート順を指定できる
  • collections.Counter
    • Counter([iterable-or-mapping])
    • 辞書を拡張したクラス
      • カウント済み要素をキー、その出現数を値 (整数) として保持
      • カウント済みの要素を [] で指定して数を取得できる
      • カウント対象に存在しない要素を [] 指定してもエラーにならず 0 を返す
      • 後からカウントを増減もできるし、新たな要素に対していきなり数を割り当てても OK
    • elements() 「キーを値分繰り返す」を全要素に対して繰り返すイテレーターを返す (値が0以下のキーは除かれる)
    • most_common([n]) 値が大きな要素順にタプル (キー, 値) を並べたリストを返す (n 指定なら最大 n 個のタプルを含む)
    • subtract(iterable-or-mapping)
    • update(iterable-or-mapping)
  • collections.defaultdict
    • 辞書の拡張で、保持していないキーへのアクセス時に返す内容を予め決められる (辞書では無条件にエラー)
    • defaultdict(default_factory=None, /[, ...])
      • default_factory には呼び出し可能オブジェクトを設定
  • collections.namedtuple
    • namedtuple(typename, field_names) typename というクラスが返される (tuple のサブクラス)
    >>> from collections import namedtuple
    >>> Pet = namedtuple('Pet', 'animal, name, age')  # Pet型を作成
    >>> seven = Pet('ferret', 'せぶん', 3)  # Pet型のインスタンスを作成
    >>> seven  # 「名前=値」の形式で確認できる
    Pet(animal='ferret', name='せぶん', age=3)
    >>> michiko = Pet('cat', 'ミチコ', 1)  # 別のインスタンスを作成
    >>> michiko
    Pet(animal='cat', name='ミチコ', age=1)
    >>> seven.age  # 属性名で値を取得
    3
    >>> seven[1]  # インデックスでもアクセスできる
    'せぶん'
    >>> animal, name, age = michiko  # アンパック代入も可能
    >>> animal
    'cat'
    
  • enum
    • enum.Enum を継承したクラスのデータ属性として定数定義
      • 値に enum.auto() を指定すると、1 から順に整数を割り当てる
    • enum.unique enum.Enum 継承クラスへのクラスデコレーターとして使用し、複数定数への同一値の割り当てを禁止する (ValueError送出)
  • itertoos
    • zip_longest(*iterables, fillvalue=None)
      • 組み込み関数 zip() と同様に、指定イテラブルの同一インデックスを並べた タプル を取得するイテレーターを返す
      • zip() と共に、辞書が指定された場合はキーが取得対象となる
      • zip() との違いは、イテレーター出力数が引数内の最長イテラブルに合わせた要素数であること (zip() は最短イテラブル要素数)
      • fillvalue の値で、足りない要素が埋められる
    • chain(*iterables) 要素を接続したイテレーターを返す
    • groupby(iterable, key=None)
      • イテラブル要素を key で取得した値ごとに等価な内容にグループ化する (ただし、連続する要素のみをグループ化)
      • 全体としては 2要素タプルのイテレーター
      • 各要素 (2要素タプル) は (グループキー, グループ内要素を返すイテレーター) の形
    • islice(iterable, stop) islice(iterable, start, stop[, step])
      • スライスと同様の指定範囲を返すイテレーターを返す
    • product() permutations() combinations() combinations_with_replacement()
  • copy
    • copy() deepcopy()
  • os
    • 環境変数関連
      • os.environ マップ型オブジェクト
        • python プロセス起動時に環境変数を読み込み、値が設定される
        • 辞書インタフェースでキーに環境変数名を指定して取得、設定可能 (プロセス内でのみ有効な変更)
        • os.putenv() で環境変数への設定が可能だが、os.environ へ反映されない (os.environ を変更した場合には putenv() が呼ばれる)
        • os.unsetenv() での環境変数の削除も putenv() と同様に os.environ の要素削除を行わない (os.environ の要素削除時 (del) には unsetenv() が呼ばれる)
    • プロセス関連 (環境変数以外)
      • getuid() geteuid() getgid() getegid() getpid() getpgid() getppid() getgroups()
      • get に対応する関数 set*()
    • ファイル関連
      • 関数
        • chdir() chmod() chown()
        • getcwd() listdir()
        • mkdir() makedirs()
        • remove() rmdir() removedirs()
        • rename() renames()
        • symlink()
      • 定数
        • curdir pardir
        • sep extsep linesep
    • システム情報
      • confstr_names confstr(name)
      • sysconf_names sysconf(name)
      • cpu_counts() CPU 数
      • getloadavg() 過去1, 5, 15 分間のロードアベレージ (float 3 要素のタプル)
    • urandom(n) n バイトのランダム bytes を生成
  • io
    • インメモリテキストストリーム StringIO
      • read() write() seek() tell() getvalue() close()
    • インメモリバイナリストリーム BytesIO
      • StringIO メソッドに加え、getbuffer() 書き換え可能
    • seek() の第2引数に指定する値
      • io.SEEK_SET ストリーム先頭
      • io.SEEK_CUR 現在位置
      • io.SEEK_END ストリーム末尾
  • sys
    • sys.argv コマンドライン引数のリスト (list[str])
    • sys.path import での検索パスのリスト (list[str]) 以下で初期化される
      • 実行スクリプトのあるパス
      • 環境変数 PYTHONPATH のパス
      • Python インストール先
    • 関数 exit([obj]) Python を終了する
      • 引数無し : 終了ステータス 0 で終了
      • 引数が数値 : 指定値を終了ステータスとして終了
      • 引数が数値以外 : 引数を文字列化して stderr へ出力し、終了ステータス 1 で終了
      • SystemExit 例外を送出するので、捕捉可能 (終了の中断等も可能)
    • sys.strout sys.stderr sys.stdin はファイルオブジェクトであり、read() write() が使用可能 (ただし以下の通り片方のみ使用できる)
      • stdout stderr は出力専用
      • stdin は入力専用
    • sys.breakpointhook()
      • 組み込み関数 breakpoint() が呼び出す呼び出し可能オブジェクトを指定 (デフォルトは pdb.set_trace())
      • 環境変数 PYTHONBREAKPOINT への設定でも等価
    • sys.version_info Python のバージョン情報
      • major, minor, micro, releaselevel, serial の 5要素タプル
      • 各名前の属性アクセスも可能
  • argparse
    • ArgumentParser 引数設定すると、コマンドヘルプの生成、実引数のパースとプログラム中での引数利用が可能となる
    • add_argument() 引数設定を加える
    • parse_args() 実引数をパースして argparse.Namespace オブジェクトの属性へ引数を割り当て、そのオブジェクトを返す
      • 返されたオブジェクトは、引数名の属性の値が対応する引数の値となっている
  • pathlib
    • クラス継承
      classDiagram
      
      PurePath <|-- PurePosixPath
      PurePath <|-- PureWindowsPath
      PurePath <|-- Path
      PurePosixPath <|-- PosixPath
      Path <|-- PosixPath
      Path <|-- WindowsPath
      PureWindowsPath <|-- WindowsPath
      
    • PurePath 純粋パス
      • インスタンス変数
        • parts パスの各要素の タプル
        • drive root anchor
        • parents Path インスタンスのシーケンス
        • parent Path インスタンス
        • name suffix suffixes stem
      • インスタンスメソッド
        • is_absolute()
        • is_relative_to(*other)
        • match(pattern) glob 形式 pattern に自身がマッチするか
        • with_name(name) with_stem(stem) with_suffix(suffix) name, stem, suffix 部を置換した Path を返す
    • Path 具象パス
      • クラスメソッド
        • cwd() home()
      • インスタンスメソッド
        • stat()
        • glob(pattern) 自ディレクトリ内の pattern (glob) にマッチするファイル・ディレクトリをパスオブジェクトとして返すジェネレーターを返す
        • iterdir() 自ディレクトリ内の全ファイル・ディレクトリをパスオブジェクトとして返すジェネレーターを返す
        • exists() is_dir() is_file() チェック
        • chmod() rename() ファイル変更操作
        • touch() mkdir()
        • unlink()(ファイル削除) rmdir()(空ディレクトリ削除)
        • open()
        • read_text() write_text() 開いて、読み/書き、閉じる
      • 基本的に Path での複数情報取得はジェネレーターみたい
  • tempfile
    • 一時ファイル/ディレクトリ作成
    • コンテキストマネージャーとして使用可能
      • as での取得は一時ファイルは ファイルオブジェクト 、一時ディレクトリは ディレクトリパス文字列
      • with を抜ける際にファイル/ディレクトリ削除も行われる
        • NamedTemporaryFile は delete=False で残すことも可能
        • ディレクトリはその下のファイルも全部削除
    • TemporaryFile ファイル名無しファイルをディスク上に作成
    • NamedTemporaryFile ファイル名ありファイルをディスク上に作成
      • ファイルシステムが認識できるのでプロセス外から参照可能
    • SpooledTemporaryFile ファイル名無しファイルを一定容量までメモリ上に作成し、容量を超えるとディスクへ書き出す
    • TemporaryDirectory 一時ディレクトリを名前ありで作成
  • shutil
    • copyfile(src, dst) dst はファイルパス (ディレクトリパスは不可)
    • copy(src, dst) copy2(src, dst) dst はファイルパスまたはディレクトリパス
      • dst がディレクトリパスなら、その下に src のベースファイル名でコピーされる
      • copy はパーミッションをコピーする
      • copy2 はメタデータもコピーする
    • copymode(src, dst) copystat(src, dst)
  • csv
    • reader(file) csv の各行を1リストとして扱う reader オブジェクトを取得
      • reader オブジェクトは for 文で読み込むことで、ループ1回につきファイル内の1行分を1リストとして取得できる
    • writer(file) csv としてデータを書き込むことができる writer オブジェクトを取得
      • writer オブジェクトは writerow(row) で 1 行を書き込み、 writerows(rows) で複数行の書き込みを csv ファイルへ行う
        • row イテラブル
        • rows イテラブルのイテラブル (イテラブルでも動作するかも? (1行だけ書き込みたいとか))
    • DictReader(file, fieldnames, ..) を使用すると、読み込んだ csv データを辞書インターフェースで参照できる
    • DictWriter(file, fieldnames, ..) を使用すると、辞書データを任意の順序 (fieldnames で指定) でファイルへ書き出せる
  • json
    • JSON 文字列
      • dumps(obj) obj を json 文字列として返す
      • loads(s) 文字列 s を Python オブジェクトとして返す
    • JSON ファイル
      • dump(obj, file) obj を json 文字列にして file へ書き出す
      • load(file) file に記載の json 文字列を Python オブジェクトとして返す
  • urllib.parse
    • urlparse(s) 文字列 s を URL としてパースした結果を返す (ParseResult)
    • ParseResult
      • パース結果は属性名またはインデックスで参照
        • 辞書キーを属性名で指定も OK
      • scheme 0
      • netloc 1
      • path 2
      • params 3
      • query 4
      • flagment 5
      • username
      • password
      • port
      • hostname
    • クエリのパース
      • クエリが key1=aaa key2=bbb key3=ccc の場合
      • parse_qs() は辞書を返し、同一キーは値リストにまとめる
        • {'key1': ['aaa'], 'key2': ['bbb', 'ccc']}
      • parse_qsl() はタプルのリストを返し、同一キーも分ける
        • [('key1', 'aaa'), ('key2', 'bbb'), ('key3', 'ccc')]
    • クエリの組み立て
      • urlencode(query) マッピングか2要素タプルのリストを受け取り、組み立ててエンコードしたクエリ文字列を返す
    • quote() quote_plus() URL として使用できる文字列へエンコード
      • 特殊文字や複数バイト文字に対してパーセントエンコードを行う
      • スペースの変換 : quote() は %20 へ、quote_plus() は +
    • urljoin(base, url) base 部分へ url 部分を結合する
      • 共通部分を表す base に対して url で分岐させる
      • url は相対パスでもよいので .. で base の一部も上書きできる
  • urllib.request
    • urlopen(url, data) url へアクセスしてレスポンスオブジェクトを返す
      • HTTP, HTTPS ならレスポンスは http.client.HTTPResponse
      • その他なら urllib.respnse.addinforul
        • 属性 url headers status
      • HTTP の場合、 url に文字列を指定してのリクエストは以下に限定
        • data 指定なしの GET
        • data を指定しての POST
      • その他の HTTP メソッドは、Request オブジェクトを url に指定する
    • Request(url, data, method)
  • doctest
    • コード内での実行は testmod() testfile()
      • testfile では引数に外部のテキストファイルを指定可能
    • unittest でのテストに組み込む
      • load_tests() は unittest が探して呼び出す仕組み
      • DocTestSuite() は doctest の内容を unittest 向けに変換
      • addTests() で unittest のテストとして追加
      import unittest
      import doctest
      import my_module_with_doctests  # 自分で書いたモジュール
      
      
      def load_tests(loader, tests, ignore):
          tests.addTests(doctest.DocTestSuite(my_module_with_doctests))
          return tests
      
  • unittest
    • コード内での実行は main()
    • コマンドライン実行では、対象のオブジェクトパスを指定
      • python -m unittest module1.testcase1.testmethod1
      • 対象はモジュールでもクラスでもメソッドでも、複数でも OK
  • logging
    • 汎用的な使用法としてはロガーを getLogger() で取得してから、メソッド error() info() 等でログ出力する
    • モジュールの関数を使用することで、ルートロガーでログ出力できる
      • critical() error() warning() info() debug()
      • 引数はメッセージ文字列で、%s 等を含めた場合は後続の引数の値を展開できる
    • basicConfig() ロギングの設定変更で、以下の引数あり
      • filename filemode
      • format ログフォーマット
      • datefmt 日時フォーマット
      • style format で使用するスタイル %(デフォルト) { $
      • level ログレベル閾値
      • stream
      • handlers
      • force
      • encoding
      • errors
      • 出力先設定は同時に指定不可 (filename, stream, handlers)
  • secrets
    • choise(seq) seq からランダムに選択して返す
    • トークン
      • token_bytes([nbytes=None]) バイト列生成
      • token_hex([nbytes=None]) 16進数文字列生成 (1byte = 16進数2文字)
      • token_urlsafe([nbytes=None]) URL向け(Base64エンコード)文字列生成 (1byte = 平均1.3文字)
      • compare_digest(a, b) タイミング攻撃耐性のある比較

Tatsuya ISHIGAKI さんが4ヶ月前に更新 · 1件の履歴