最終更新
前回は下記リンクからご覧ください。
Pythonのよく使う標準ライブラリ一覧と使い方の例 その1
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
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