前回は下記リンクからご覧ください。
Pythonのよく使う標準ライブラリ一覧と使い方の例 その1
Pythonのstatistics
モジュールは、数値データの数学的統計量を計算するための関数を提供します。これらの関数は単純な記述統計の検索から複雑な演算まで、様々なタスクに役立ちます。
statistics
モジュールが提供する基本的な統計関数のいくつかを紹介します。
これらはほんの一部の機能であり、statistics
モジュールには分散や標準偏差などの統計演算を行うためのより多くの関数が用意されている。
statistics
ライブラリの高度な関数を調べるより高度な統計解析のために、statistics
モジュールはvariance()
やstdev()
などの関数を提供しています。ここではそれらの使い方を紹介します。
Pythonのitertools
モジュールは、(リストや辞書などの)反復子を扱う際に高速で効率的にメモリを使用することを目的としたツールのコレクションです。itertools
を使用すると効率的な方法でデータを操作でき、大規模なデータセットを含む問題で非常に便利です。
itertools
でよく使われる関数はイテラブル(リストや文字列など)を無限に反復するcycle()
と、数値(デフォルト0)からスタートして無限にインクリメントするcount()
です。
itertools.cycle()
とitertools.count()
は無限のイテレータを返すため、止めないと永遠に実行されてしまうので注意してください。
itertools
にはpermutations()
やcombination()
など、いくつかの組合せ関数も含まれています。
Pythonのfunctools
ライブラリは、高次関数、すなわち他の関数に作用したり、他の関数を返したりする関数を作成するために設計された高度なツールです。この名前はfunction
とtools
を組み合わせたもので、このライブラリが関数を扱うための一連のツールを提供することを意味しています。特に、他の関数をパラメータとして取り込んだり、他の関数を返したりする関数のような高次の関数を扱うときに便利です。
functools
の一般的な使い方のひとつに他の関数の動作を変更する特殊な関数であるデコレーターの作成があります。ここではある関数の実行時間を記録するデコレーターの例を示します。
この例では、@timer_decorator
がadd
関数のソースコードを変更することなく修正を適用しています。
functools
にはlru_cache
(Least Recently Used Cache)というデコレーターも用意されており、計算量が多く、同じ引数で何度も呼び出される関数の場合は高速化できます。以下は簡単な例です。
この例では、lru_cache
がfib
関数の結果を記憶しているので同じ引数でfibを再度呼び出すと、記憶した結果を返すだけでn番目のフィボナッチ数の計算にかかる時間が大幅に短縮されます。
Pythonではoperator
モジュールは関数型プログラミングツールとして機能します。基本的には算術演算子や比較演算子のように、一般的に関数的または記号的な方法で使用される演算子の機能を提供するものです。これによってコードがより読みやすくなり、多くの場合、より効率的になります。
operator
の一般的な使い方の1つに、関数のパラメータとして演算子を使用するためのより読みやすく効率的な方法を提供することがあります。これはmap()
やfilter()
のような関数との組み合わせで特に有用です。以下はその例です。
この例では掛け算を行うoperator.mul
関数とmap()
関数を使ってリスト内の各数値を二乗しています。
operator
ライブラリは辞書のリストをソートする際にも非常に便利です。例えば、各辞書が人を表す辞書のリストがあり、その人の年齢でリストをソートしたい場合、operator
ライブラリのitemgetter
関数を使うことができます。
Pythonにおいて、pathlib
はファイルシステムのパスを扱うために使用される組み込みライブラリです。os.path
などの他の組み込み手法と比較して、より直感的にファイルパスを扱えるように設計されています。
pathlib
モジュールを使えばオペレーティングシステムによって異なるスラッシュやバックスラッシュの正しい使い方を気にすることなく、簡単にパスを構築できます。以下は、パスを作成する例です。
パスの結合は、/
演算子を使って簡単にできます。
pathlib
モジュールにはファイルの属性にアクセスしたり、パスを操作したりするためのメソッドも多数用意されています。以下はその例です。
このようにpathlib
はPythonでファイルパスを扱うためのシンプルで直感的な方法を提供しており、ファイル操作する必要がある場合には強く推奨します。
Pythonのglob
モジュールは、プログラマーが指定されたパターンに一致するディレクトリ階層下のファイルのリストを作成するために使用する強力なツールです。glob
という用語はUnixのシェル言語に由来しており、ワイルドカード文字を使ってファイル名を照合するために使用されます。
glob
モジュールには、パターンを受け取り、そのパターンにマッチするファイルのリストを返すglob
と呼ばれる関数があります。例えば、カレントディレクトリにあるすべての.txt
ファイルを探したい場合、次のようにします。
また、サブディレクトリ内のファイルを検索できます。例えばカレントディレクトリの任意のサブディレクトリにあるすべての.jpg
ファイルを見つけたい場合は、次のようにします。
glob
はUnixシェルで使用される通常のワイルドカード文字、*
(全てにマッチ)、?
(任意の1文字にマッチ)、[]
(括弧内の任意の文字にマッチ)をサポートします。以下はその例です。
SQLiteは自己完結型、ファイルベース、そして完全な機能を持つSQLエンジンです。Pythonの標準ライブラリにはSQLiteデータベースと対話するために設計されたsqlite3
と呼ばれるモジュールが含まれています。他の多くのSQLデータベースとは異なり、別のサーバープロセスを必要とせず、SQLクエリ言語の非標準的な変種を使用してデータベースにアクセスできます。
SQLiteデータベースと対話するためには、まずそのデータベースへの接続を作成する必要があります。これは、Connection
オブジェクトを返すconnect()
関数で行うことができます。新しいデータベースを作成したり、既存のデータベースに接続したりできます。以下はその例です。
データベースに変更を加えた後、接続を閉じることを忘れないでください。
Connection
オブジェクトを使えば、PythonでSQLコマンドを実行できるようになりました。接続オブジェクトのexecute()
メソッドでは、任意のSQLコマンドを実行できます。ここでは、テーブルを作成する例を示します。
変更した内容をデータベースに保存するには、接続オブジェクトのcommit()
メソッドを呼び出す必要があります。
Pythonのzlib
ライブラリは、コンピュータの世界で広く使われている圧縮アルゴリズムであるDEFLATEアルゴリズムを使ってデータを圧縮・解凍するための関数を提供しています。このモジュールでは、gzipフォーマットやCRC-32チェックサム計算などを用いてデータブロックを管理できます。zlibモジュールは、大きなデータやファイルを扱うときに優れたツールです。
zlib
の主要な関数はcompress()
とdecompress()
です。compress()
関数はバイト列を受け取り、データを圧縮したバイト列を返します。逆にdecompress()
はデータを解凍します。以下はその例です。
zlib
のもう1つの便利な機能はデータの CRC-32 (Cyclic Redundancy Check) チェックサムを計算し、データの完全性をチェックするのに役立ちます。以下はその例です。
Pythonのgzip
モジュールは標準ライブラリの一部で、GNU zip形式を使ったファイルの圧縮と解凍に使用されます。このフォーマットはUnixやLinuxシステムでファイル圧縮のために最も一般的に使用されています。gzip
モジュールは、gzipファイルを作成する機能と、これらのファイルに対して直接読み書きする機能を提供します。
Pythonでgzipファイルを作成するには、gzip.open()
メソッドでファイルを開き他のファイルと同じように書き込むだけでよいです。以下はその例です。
このスクリプトは、file.txt.gz
という新しいgzipファイルを作成し、そこにバイト列data
を書き込むものです。
gzipファイルからの読み込みは、書き込みとほぼ同じ方法で行われます。gzip.open()
メソッドでファイルを開き.read()
を呼び出して内容を読み込みます。以下はその例です。
Pythonのzipfile
モジュールは標準ライブラリの一部です。ZIPファイルの作成、読み込み、書き込み、追記、一覧表示などの機能を提供します。ZIPは可逆的なデータ圧縮をサポートする一般的なアーカイブファイル形式です。ZIPファイルは1つまたは複数のファイルやディレクトリを含むことができます。
zipfile
モジュールを使うと新しいZIPファイルを作成したり、既存のZIPファイルに追記したりできます。ZIPファイルにファイルを書き込むには、ZipFile
クラスを使用し、第2引数に書き込みモードを示すw
を指定します。以下はその例です。
この例では、newfile.zip
という名前の新しいZIPファイルを作成し、test.txt
という名前のファイルをその中に追加しています。write
メソッドにはZIPファイルに追加するファイル名を指定します。
ZIPファイルの中身を読むにはZipFile
クラスで読み出し用のファイルを開くだけです。
この例では、先に作成したnewfile.zip
ファイルを開き、すべてのファイルをカレントディレクトリに展開します。extractall
メソッドは、アーカイブのすべてのメンバーを現在の作業ディレクトリに展開します。
Pythonのtarfile
モジュールは、tarアーカイブの読み書きするためのものです。tarアーカイブは、複数のファイルをまとめて1つのパッケージにする一般的な方法です。Unixベースのシステムでよく使用されます。tarfile
モジュールはtarアーカイブの作成、tarアーカイブの読み込み、これらのアーカイブからファイルを抽出する機能を提供します。
tarfile
モジュールを使えば新しいtarアーカイブの作成は簡単です。
この例ではmy_archive.tar
という名前の新しいtarファイルを作成し、test.txt
という名前のファイルをその中に追加しています。tarアーカイブにファイルを追加するには、add
メソッドを使用します。
tarファイルの中身を読み取るのも簡単です。tarアーカイブの中身を一覧表示したりファイルを抽出したりできます。
この例では先に作成したmy_archive.tar
ファイルを開き、すべてのファイルをカレントディレクトリに展開します。extractall
メソッドは、アーカイブの全メンバーを現在の作業ディレクトリに抽出します。
CSVはComma Separated Valuesの略で、表計算ソフトやデータベースのように表形式で情報が保存される最も一般的なデータ形式の1つです。Pythonのcsv
モジュールを使うと、CSVファイルを簡単に解析し操作できます。
csv
モジュールでできる最も基本的な操作の1つはCSVファイルの読み込みです。Pythonのcsv
モジュールにはCSVファイルを読み込むためのリーダー関数が用意されています。ここでは、data.csv
という名前のCSVファイルを読んでみましょう。
この例ではdata.csv
ファイルを開きCSVリーダーを作成しファイルの行を繰り返し処理します。各行には、その行の値のリストが表示されます。
csv
モジュールではCSVファイルの書き込みも可能です。ここでは、CSVファイルにデータを書き込む方法を説明します。
この例では、データを表現するためにリストのリストを作成し、各リストはデータの行になります。次に、ファイルを開き(存在しない場合は作成する)、そのファイル用のCSVライターを作成し、データをファイルに書き込みます。writerow
を呼び出すたびにCSVファイルへ1行ずつ書き込みます。
Pythonのconfigparser
モジュールは設定ファイルを操作するために使用します。これはWindowsのINIファイルによく似ています。キー・バリューペアに似た構造を提供します。設定ファイルは、[section]
ヘッダで始まるセクションと、特定の文字列(デフォルトでは=
または:
)を使って区切られたキー/値で構成されています。
configparser
を使用して設定ファイルを作成してみましょう。ここでは3つのセクションを作成することにします。DEFAULT、Settings、Filesの3つのセクションを作成し、それぞれにキーと値のペアを設定します。
このスクリプトはカレントディレクトリにexample.ini
ファイルを作成します。
では、先ほど作成した設定ファイルを読み込む方法を紹介します。
このスクリプトでは、まずconfig.read()
を使って設定ファイルを読み込んでいます。config.section()
メソッドはセクションのリストを返します。キーの値にアクセスするには、辞書のような方法でconfig
オブジェクトを使用します。
Pythonのtomllib
ライブラリはTOMLファイルを扱うために設計されています。TOMLは設定ファイルのフォーマット言語で、明白で最小限の構文により、読み書きが容易であることを意図しています。様々なアプリケーションの設定ファイルとして一般的に使用されています。
この例ではいくつかのセクションを持つTOML設定ファイルを作成してみましょう。
このスクリプトを実行すると、config辞書に記述されたデータを含むconfig.toml
ファイルがカレントディレクトリに生成されます。
先ほど作成したTOMLファイルをtoml
モジュールで読み取ってみましょう。
このスクリプトでは、まずtoml.load()
を使ってTOMLファイルを読み込みます。configを辞書として扱うことで、設定値にアクセスできます。
Pythonのhashlib
ライブラリはメッセージを安全にハッシュ化するためのわかりやすいインターフェイスを提供します。ハッシュ化とは、データを一意な値に変換することで、データ検索、パスワード保存、データ完全性検証、暗号化アプリケーションなどでよく使われます。
hashlib
の最も基本的な使い方の1つは与えられた文字列に対するハッシュを生成することです。例えば、次のようにすればメッセージのSHA256ハッシュを作成できます。
このコードはメッセージ文字列を受け取り、それをバイトにエンコードし、SHA256を使ってハッシュ化し、ハッシュオブジェクトを読みやすいように16進数の文字列に変換しています。
hashlib
は、SHA1、SHA224、SHA256、SHA384、SHA512、MD5など、さまざまなハッシュアルゴリズムに対応しています。hashlibモジュール内の適切な関数を呼び出すだけで、異なるアルゴリズムを使用できます。以下は、MD5ハッシュを作成する例です。
異なるハッシュアルゴリズムには異なる特性があり、他のものより安全なものがあることを忘れないでください。ほとんどの用途ではSHA256が良い選択です。
Pythonのhmac
ライブラリは鍵付きハッシュメッセージ認証コード(HMAC)を生成するための強力なツールです。HMACは、暗号化ハッシュ関数を用いてメッセージと秘密鍵を結合します。この仕組みは、データの完全性や真正性を保証するためによく使われます。
HMACを作成するには、メッセージ、キー、ハッシュアルゴリズムを指定する必要があります。Pythonのhmac
ライブラリは、このプロセスを簡略化します。以下はその例です。
この例ではhmac
モジュールのnew
関数を使って、新しいHMACオブジェクトを作成し、キーとメッセージを渡し、ハッシュ関数としてSHA256を指定しています。メッセージとキーは文字列ではなくバイトでなければならないので、バイトリテラル(b''
)を使っています。
鍵となる符号を他者に知られている場合は任意のメッセージに対して独自のHMACを生成でき、HMACの目的が達成されません。また、HMACにはSHA256のような安全なハッシュ関数を使用するのが一般的です。
また、hmac
モジュールはcompare_digest
関数を提供し、2つのダイジェストが等しいかどうかを安全に比較するために使用できることを忘れないでください。
この例では、compare_digest
を使用して2つのHMACオブジェクトのダイジェストを比較し、同じであればTrue、そうでなければFalseを返しています。これは、==
演算子とは異なり、タイミング攻撃に対して安全です。
Pythonの組み込みsecrets
モジュールは、パスワード、アカウント認証、セキュリティトークン、および関連する秘密などのデータを管理するのに適した、暗号的に強い乱数を生成する便利なライブラリです。暗号化アプリケーションでは、これらの数値は安全なランダムパスワードやトークンの作成に使用されます。
secrets
モジュールの最もよく使われる機能の1つがセキュアトークンの生成です。ここでは指定したバイト数でランダムなURLセーフのテキスト文字列を生成する方法を紹介します。
上の例では、token_urlsafe()
関数が16バイトのランダムなURLセーフテキスト文字列を生成しています。
トークンを生成する以外にもsecrets
モジュールを使って安全な乱数を生成できます。これは特にランダムなパスワードを作成するのに便利です。以下はその例です。
上記の例では、パスワードの各文字の生成にsecrets.choice()
関数が使われています。これは与えられたアルファベットからランダムに文字を選択し、パスワードの希望の長さのためにこのプロセスを繰り返します。これにより、生成される各パスワードの高いランダム性が確保されます。
Pythonではio
モジュールが様々なタイプのI/O(入出力)を扱うための主要な機能を提供します。I/Oには、テキストI/O、バイナリI/O、生I/Oの3つの主要なタイプがあります。特定のユースケースに対しては動作を実装する様々な具象クラスが存在します。
主要なクラスの1つであるStringIOを見てみましょう。このクラスはバッファ間で文字列の読み書きします。これは一時ファイルを必要とせず、メモリ内で文字列を操作するのに便利です。以下はその例です。
この例ではまずoutput
というStringIOオブジェクトを作成します。そして、write()
メソッドとprint()
関数を使用して、このオブジェクトに書き込みを行います。最後に、getvalue()
で全内容を取得しています。
StringIOと同様に、BytesIOはバッファ(今回はstrではなくbytes)との間でバイトの読み書きするクラスです。以下はその例です。
この例では、BytesIOオブジェクトを作成し、そこにバイトを書き込んでいます。そして、getvalue()
を使って内容を取得しています。バイトの書き込みと読み出しを行っているので、これを示すために文字列の前にb
を付けています。
Pythonのtime
モジュールは時間に関連する様々な関数を提供します。タイムスタンプやプログラムの遅延を扱う必要があるとき、あるいは単に現在の時刻を知りたいときに役立つツールです。
よく使われる関数にtime()
があり、エポック(epoch)からの経過秒数を浮動小数点数で返します。エポックとはUTC(協定世界時)で1970年1月1日の始まりと定義されています。タイムスタンプを比較したり、あるコードにかかった時間を計測したりするときに使うことができます。
このコードではエポック開始からの経過秒数が出力されます。
よく使う関数にsleep()
があります。この関数は指定した秒数だけプログラムを待たせるものです。プログラムに遅延や一時停止を導入するのに便利です。
この例では、まずメッセージを表示し、2.4秒待って別のメッセージを表示しています。このコードを実行すると遅延があることに気がつくでしょう。
続きは下記リンクからご覧ください。
Pythonのよく使う標準ライブラリ一覧と使い方の例 その3