フリーキーズ | 独学プログラミング

Pythonのよく使う標準ライブラリ一覧と使い方の例 その2

最終更新日
【画像】Pythonのよく使う標準ライブラリ一覧と使い方の例 その2

前回は下記リンクからご覧ください。

Pythonのよく使う標準ライブラリ一覧と使い方の例 その1

statisticsで統計的な計算をする

Pythonのstatisticsモジュールは、数値データの数学的統計量を計算するための関数を提供します。これらの関数は単純な記述統計の検索から複雑な演算まで、様々なタスクに役立ちます。

import statistics

statisticsライブラリの基本的な関数を使う

statisticsモジュールが提供する基本的な統計関数のいくつかを紹介します。

data = [1, 3, 4, 5, 7, 9, 2]

# 平均の算出
mean = statistics.mean(data)
print(f'平均: {mean}')  # 出力: 平均: 4.428571428571429

# 中央値の算出
median = statistics.median(data)
print(f'中央値: {median}')  # 出力: 中央値: 4

# 最頻値の算出
mode = statistics.mode(data)
print(f'最頻値: {mode}')  # 出力: 最頻値: 1

これらはほんの一部の機能であり、statisticsモジュールには分散や標準偏差などの統計演算を行うためのより多くの関数が用意されている。

statisticsライブラリの高度な関数を調べる

より高度な統計解析のために、statisticsモジュールはvariance()stdev()などの関数を提供しています。ここではそれらの使い方を紹介します。

# 分散の算出
variance = statistics.variance(data)
print(f'分散: {variance}')  # 出力: 分散: 9.238095238095237

# 標準偏差の算出
stdev = statistics.stdev(data)
print(f'標準偏差: {stdev}')  # 出力: 標準偏差: 3.0394235042348474

itertoolsで繰り返し処理パフォーマンスを上げる

Pythonのitertoolsモジュールは、(リストや辞書などの)反復子を扱う際に高速で効率的にメモリを使用することを目的としたツールのコレクションです。itertoolsを使用すると効率的な方法でデータを操作でき、大規模なデータセットを含む問題で非常に便利です。

import itertools

itertoolsによる基本的な操作

itertoolsでよく使われる関数はイテラブル(リストや文字列など)を無限に反復するcycle()と、数値(デフォルト0)からスタートして無限にインクリメントするcount()です。

# itertools.cycle()を使用
cycler = itertools.cycle('ABCD')
for i in range(10):
    print(next(cycler))  # 出力: A B C D A B C D A B

# itertools.count()を使用
counter = itertools.count(start=5, step=5)
for i in range(10):
    print(next(counter))  # 出力: 5 10 15 20 25 30 35 40 45 50

itertools.cycle()itertools.count()は無限のイテレータを返すため、止めないと永遠に実行されてしまうので注意してください。

itertoolsによる高度な操作

itertoolsにはpermutations()combination()など、いくつかの組合せ関数も含まれています。

# 順列の作成
perms = itertools.permutations('ABC', 2)
for perm in perms:
    print(perm)  # 出力: ('A', 'B') ('A', 'C') ('B', 'A') ('B', 'C') ('C', 'A') ('C', 'B')

# 組み合わせの作成
combs = itertools.combinations('ABC', 2)
for comb in combs:
    print(comb)  # 出力: ('A', 'B') ('A', 'C') ('B', 'C')

functoolsで関数を拡張する

Pythonのfunctoolsライブラリは、高次関数、すなわち他の関数に作用したり、他の関数を返したりする関数を作成するために設計された高度なツールです。この名前はfunctiontoolsを組み合わせたもので、このライブラリが関数を扱うための一連のツールを提供することを意味しています。特に、他の関数をパラメータとして取り込んだり、他の関数を返したりする関数のような高次の関数を扱うときに便利です。

import functools

デコレーターでfunctoolsを理解する

functoolsの一般的な使い方のひとつに他の関数の動作を変更する特殊な関数であるデコレーターの作成があります。ここではある関数の実行時間を記録するデコレーターの例を示します。

import time

def timer_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"Executed {func.__name__} in {end_time - start_time} seconds")
        return result
    return wrapper

@timer_decorator
def add(a, b):
    time.sleep(2)  # 長めの実行処理
    return a + b

print(add(3, 5))  # 出力: Executed add in 2.002013921737671 seconds

この例では、@timer_decoratoradd関数のソースコードを変更することなく修正を適用しています。

パフォーマンスを最適化するfunctools.lru_cache

functoolsにはlru_cache(Least Recently Used Cache)というデコレーターも用意されており、計算量が多く、同じ引数で何度も呼び出される関数の場合は高速化できます。以下は簡単な例です。

@functools.lru_cache
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

print(fib(10))  # 出力: 55

この例では、lru_cachefib関数の結果を記憶しているので同じ引数でfibを再度呼び出すと、記憶した結果を返すだけでn番目のフィボナッチ数の計算にかかる時間が大幅に短縮されます。

operatorで演算子の可読性を上げる

Pythonではoperatorモジュールは関数型プログラミングツールとして機能します。基本的には算術演算子や比較演算子のように、一般的に関数的または記号的な方法で使用される演算子の機能を提供するものです。これによってコードがより読みやすくなり、多くの場合、より効率的になります。

import operator

Pythonにおけるoperatorの威力

operatorの一般的な使い方の1つに、関数のパラメータとして演算子を使用するためのより読みやすく効率的な方法を提供することがあります。これはmap()filter()のような関数との組み合わせで特に有用です。以下はその例です。

nums = [1, 2, 3, 4, 5]
squares = list(map(operator.mul, nums, nums))
print(squares)  # 出力: [1, 4, 9, 16, 25]

この例では掛け算を行うoperator.mul関数とmap()関数を使ってリスト内の各数値を二乗しています。

リストのソートにおけるoperatorライブラリ

operatorライブラリは辞書のリストをソートする際にも非常に便利です。例えば、各辞書が人を表す辞書のリストがあり、その人の年齢でリストをソートしたい場合、operatorライブラリのitemgetter関数を使うことができます。

people = [{'name': 'Taro', 'age': 20}, {'name': 'Hanako', 'age': 18}, {'name': 'Bob', 'age': 21}]
people.sort(key=operator.itemgetter('age'))
print(people)  # 出力: [{'name': 'Hanako', 'age': 18}, {'name': 'Taro', 'age': 20}, {'name': 'Bob', 'age': 21}]

pathlibでファイルパスを便利に扱う

Pythonにおいて、pathlibはファイルシステムのパスを扱うために使用される組み込みライブラリです。os.pathなどの他の組み込み手法と比較して、より直感的にファイルパスを扱えるように設計されています。

from pathlib import Path

pathlibによるファイルシステムのナビゲート

pathlibモジュールを使えばオペレーティングシステムによって異なるスラッシュやバックスラッシュの正しい使い方を気にすることなく、簡単にパスを構築できます。以下は、パスを作成する例です。

p = Path('dir1/dir2')

パスの結合は、/演算子を使って簡単にできます。

new_p = p / 'dir3' / 'file.txt'
print(new_p)  # 出力: dir1/dir2/dir3/file.txt

ファイルの属性にアクセスし、パスを操作する

pathlibモジュールにはファイルの属性にアクセスしたり、パスを操作したりするためのメソッドも多数用意されています。以下はその例です。

p = Path('dir1/dir2/file.txt')

# 親ディレクトリを取得
print(p.parent)  # 出力: dir1/dir2

# ファイル名を取得
print(p.name)  # 出力: file.txt

# 拡張子を取得
print(p.suffix)  # 出力: .txt

# 拡張子を変更
new_p = p.with_suffix('.jpg')
print(new_p)  # 出力: dir1/dir2/file.jpg

このようにpathlibはPythonでファイルパスを扱うためのシンプルで直感的な方法を提供しており、ファイル操作する必要がある場合には強く推奨します。

globでファイルの一括操作を簡単に扱う

Pythonのglobモジュールは、プログラマーが指定されたパターンに一致するディレクトリ階層下のファイルのリストを作成するために使用する強力なツールです。globという用語はUnixのシェル言語に由来しており、ワイルドカード文字を使ってファイル名を照合するために使用されます。

import glob

globでファイルを検索する

globモジュールには、パターンを受け取り、そのパターンにマッチするファイルのリストを返すglobと呼ばれる関数があります。例えば、カレントディレクトリにあるすべての.txtファイルを探したい場合、次のようにします。

txt_files = glob.glob('*.txt')

また、サブディレクトリ内のファイルを検索できます。例えばカレントディレクトリの任意のサブディレクトリにあるすべての.jpgファイルを見つけたい場合は、次のようにします。

jpg_files = glob.glob('**/*.jpg', recursive=True)

ワイルドカードと文字クラスの使用

globはUnixシェルで使用される通常のワイルドカード文字、*(全てにマッチ)、?(任意の1文字にマッチ)、[](括弧内の任意の文字にマッチ)をサポートします。以下はその例です。

# '.py'で終わるすべてのファイル
py_files = glob.glob('*.py')

# 'file1', 'file2', ..., 'file9'がつくすべてのファイル
files = glob.glob('file[1-9]')

# 'file1'と'file2'がつくファイル
files = glob.glob('file[1-2]')

sqlite3でSQLiteデータベースを操作する

SQLiteは自己完結型、ファイルベース、そして完全な機能を持つSQLエンジンです。Pythonの標準ライブラリにはSQLiteデータベースと対話するために設計されたsqlite3と呼ばれるモジュールが含まれています。他の多くのSQLデータベースとは異なり、別のサーバープロセスを必要とせず、SQLクエリ言語の非標準的な変種を使用してデータベースにアクセスできます。

import sqlite3

SQLite データベースの作成と接続

SQLiteデータベースと対話するためには、まずそのデータベースへの接続を作成する必要があります。これは、Connectionオブジェクトを返すconnect()関数で行うことができます。新しいデータベースを作成したり、既存のデータベースに接続したりできます。以下はその例です。

conn = sqlite3.connect('example.db')

データベースに変更を加えた後、接続を閉じることを忘れないでください。

conn.close()

SQLite3によるSQLコマンドの実行

Connectionオブジェクトを使えば、PythonでSQLコマンドを実行できるようになりました。接続オブジェクトのexecute()メソッドでは、任意のSQLコマンドを実行できます。ここでは、テーブルを作成する例を示します。

cursor = conn.cursor()
cursor.execute("""
    CREATE TABLE employees (
        employee_id INTEGER PRIMARY KEY,
        first_name TEXT NOT NULL,
        last_name TEXT NOT NULL,
        hire_date DATE NOT NULL
    )
""")

変更した内容をデータベースに保存するには、接続オブジェクトのcommit()メソッドを呼び出す必要があります。

conn.commit()

zlibで圧縮アルゴリズムを扱う

Pythonのzlibライブラリは、コンピュータの世界で広く使われている圧縮アルゴリズムであるDEFLATEアルゴリズムを使ってデータを圧縮・解凍するための関数を提供しています。このモジュールでは、gzipフォーマットやCRC-32チェックサム計算などを用いてデータブロックを管理できます。zlibモジュールは、大きなデータやファイルを扱うときに優れたツールです。

import zlib

zlibによるデータの圧縮と解凍

zlibの主要な関数はcompress()decompress()です。compress()関数はバイト列を受け取り、データを圧縮したバイト列を返します。逆にdecompress()はデータを解凍します。以下はその例です。

# オリジナルデータ
data = b"This is some data that we want to compress"

# データの圧縮
compressed_data = zlib.compress(data)

print(f'圧縮データ: {compressed_data}')

# データの解凍
decompressed_data = zlib.decompress(compressed_data)

print(f'解凍されたデータ: {decompressed_data}')

zlib によるデータの完全性チェック

zlibのもう1つの便利な機能はデータの CRC-32 (Cyclic Redundancy Check) チェックサムを計算し、データの完全性をチェックするのに役立ちます。以下はその例です。

# CRC-32チェックサムの計算
checksum = zlib.crc32(data)

print(f'CRC-32 checksum: {checksum}')

gzipでファイルの圧縮と解凍を行う

Pythonのgzipモジュールは標準ライブラリの一部で、GNU zip形式を使ったファイルの圧縮と解凍に使用されます。このフォーマットはUnixやLinuxシステムでファイル圧縮のために最も一般的に使用されています。gzipモジュールは、gzipファイルを作成する機能と、これらのファイルに対して直接読み書きする機能を提供します。

import gzip

gzipファイルの作成と書き出し

Pythonでgzipファイルを作成するには、gzip.open()メソッドでファイルを開き他のファイルと同じように書き込むだけでよいです。以下はその例です。

import gzip

data = b"This is some data that we want to compress"

with gzip.open('file.txt.gz', 'wb') as f:
    f.write(data)

このスクリプトは、file.txt.gzという新しいgzipファイルを作成し、そこにバイト列dataを書き込むものです。

gzipファイルからの読み込み

gzipファイルからの読み込みは、書き込みとほぼ同じ方法で行われます。gzip.open()メソッドでファイルを開き.read()を呼び出して内容を読み込みます。以下はその例です。

import gzip

with gzip.open('file.txt.gz', 'rb') as f:
    file_content = f.read()

print(file_content)

zipfileでzipファイルを操作する

Pythonのzipfileモジュールは標準ライブラリの一部です。ZIPファイルの作成、読み込み、書き込み、追記、一覧表示などの機能を提供します。ZIPは可逆的なデータ圧縮をサポートする一般的なアーカイブファイル形式です。ZIPファイルは1つまたは複数のファイルやディレクトリを含むことができます。

import zipfile

ZIPファイルの作成と書き出し

zipfileモジュールを使うと新しいZIPファイルを作成したり、既存のZIPファイルに追記したりできます。ZIPファイルにファイルを書き込むには、ZipFileクラスを使用し、第2引数に書き込みモードを示すwを指定します。以下はその例です。

import zipfile

# 新しいZIPファイル作成
with zipfile.ZipFile('newfile.zip', 'w') as myzip:
    # ZIPファイルに書き込み
    myzip.write('test.txt')

この例では、newfile.zipという名前の新しいZIPファイルを作成し、test.txtという名前のファイルをその中に追加しています。writeメソッドにはZIPファイルに追加するファイル名を指定します。

ZIPファイルから読み込む

ZIPファイルの中身を読むにはZipFileクラスで読み出し用のファイルを開くだけです。

import zipfile

# 既存のZIPファイルを読み込み
with zipfile.ZipFile('newfile.zip', 'r') as myzip:
    # すべてのファイルを抽出
    myzip.extractall()

この例では、先に作成したnewfile.zipファイルを開き、すべてのファイルをカレントディレクトリに展開します。extractallメソッドは、アーカイブのすべてのメンバーを現在の作業ディレクトリに展開します。

tarfileでtarアーカイブを操作する

Pythonのtarfileモジュールは、tarアーカイブの読み書きするためのものです。tarアーカイブは、複数のファイルをまとめて1つのパッケージにする一般的な方法です。Unixベースのシステムでよく使用されます。tarfileモジュールはtarアーカイブの作成、tarアーカイブの読み込み、これらのアーカイブからファイルを抽出する機能を提供します。

import tarfile

tarファイルの作成と書き出し

tarfileモジュールを使えば新しいtarアーカイブの作成は簡単です。

import tarfile

# 新しいtarファイルの作成
with tarfile.open('my_archive.tar', 'w') as tar:
    # tarファイルにファイルを追加
    tar.add('test.txt')

この例ではmy_archive.tarという名前の新しいtarファイルを作成し、test.txtという名前のファイルをその中に追加しています。tarアーカイブにファイルを追加するには、addメソッドを使用します。

tarファイルから読み込む

tarファイルの中身を読み取るのも簡単です。tarアーカイブの中身を一覧表示したりファイルを抽出したりできます。

import tarfile

# 既存のtarファイルを読み込み
with tarfile.open('my_archive.tar', 'r') as tar:
    # 中身のファイルを抽出
    tar.extractall()

この例では先に作成したmy_archive.tarファイルを開き、すべてのファイルをカレントディレクトリに展開します。extractallメソッドは、アーカイブの全メンバーを現在の作業ディレクトリに抽出します。

csvでCSVファイルの読み書きを操作する

CSVはComma Separated Valuesの略で、表計算ソフトやデータベースのように表形式で情報が保存される最も一般的なデータ形式の1つです。Pythonのcsvモジュールを使うと、CSVファイルを簡単に解析し操作できます。

import csv

CSVファイルの読み込み

csvモジュールでできる最も基本的な操作の1つはCSVファイルの読み込みです。PythonのcsvモジュールにはCSVファイルを読み込むためのリーダー関数が用意されています。ここでは、data.csvという名前のCSVファイルを読んでみましょう。

import csv

# ファイルを開く
with open('data.csv', 'r') as file:
    # CSVリーダーを作成
    reader = csv.reader(file)

    # 行を展開する
    for row in reader:
        print(row)

この例ではdata.csvファイルを開きCSVリーダーを作成しファイルの行を繰り返し処理します。各行には、その行の値のリストが表示されます。

CSVファイルの書き方

csvモジュールではCSVファイルの書き込みも可能です。ここでは、CSVファイルにデータを書き込む方法を説明します。

import csv

# 書き込むデータ
data = [
    ['Name', 'Age'],
    ['Taro', 25],
    ['Hanako', 30],
]

# ファイルを開く
with open('data.csv', 'w', newline='') as file:
    # CSVライターを作成
    writer = csv.writer(file)

    # データを書き込む
    for row in data:
        writer.writerow(row)

この例では、データを表現するためにリストのリストを作成し、各リストはデータの行になります。次に、ファイルを開き(存在しない場合は作成する)、そのファイル用のCSVライターを作成し、データをファイルに書き込みます。writerowを呼び出すたびにCSVファイルへ1行ずつ書き込みます。

configparserで設定ファイルを操作する

Pythonのconfigparserモジュールは設定ファイルを操作するために使用します。これはWindowsのINIファイルによく似ています。キー・バリューペアに似た構造を提供します。設定ファイルは、[section]ヘッダで始まるセクションと、特定の文字列(デフォルトでは=または:)を使って区切られたキー/値で構成されています。

import configparser

設定ファイルへの書き込み

configparserを使用して設定ファイルを作成してみましょう。ここでは3つのセクションを作成することにします。DEFAULT、Settings、Filesの3つのセクションを作成し、それぞれにキーと値のペアを設定します。

import configparser

config = configparser.ConfigParser()

config['DEFAULT'] = {'ServerAliveInterval': '45',
                     'Compression': 'yes',
                     'CompressionLevel': '9'}

config['Settings'] = {}
config['Settings']['User'] = 'user_name'
config['Settings']['Password'] = 'user_password'

config['Files'] = {}
config['Files']['Document'] = 'doc_file.txt'
config['Files']['Image'] = 'img_file.jpg'

with open('example.ini', 'w') as configfile:
    config.write(configfile)

このスクリプトはカレントディレクトリにexample.iniファイルを作成します。

設定ファイルからの読み込み

では、先ほど作成した設定ファイルを読み込む方法を紹介します。

import configparser

config = configparser.ConfigParser()
config.read('example.ini')

# すべてのsectionを出力
print(config.sections())

# ファイルの値にアクセス
print('Settings:', config['Settings'])
print('User:', config['Settings']['User'])
print('Password:', config['Settings']['Password'])

このスクリプトでは、まずconfig.read()を使って設定ファイルを読み込んでいます。config.section()メソッドはセクションのリストを返します。キーの値にアクセスするには、辞書のような方法でconfigオブジェクトを使用します。

tomllibでTOMLファイルを操作する

PythonのtomllibライブラリはTOMLファイルを扱うために設計されています。TOMLは設定ファイルのフォーマット言語で、明白で最小限の構文により、読み書きが容易であることを意図しています。様々なアプリケーションの設定ファイルとして一般的に使用されています。

import toml

TOMLファイルの書き方

この例ではいくつかのセクションを持つTOML設定ファイルを作成してみましょう。

import toml

# 設定データ
config = {
    'database': {
        'server': '192.168.1.1',
        'ports': [8001, 8001, 8002],
        'connection_max': 5000,
        'enabled': True
    },
    'servers': {
        'alpha': {
            'ip': '10.0.0.1',
            'dc': 'eqdc10'
        },
        'beta': {
            'ip': '10.0.0.2',
            'dc': 'eqdc10'
        }
    }
}

# 設定を書き込む
with open('config.toml', 'w') as f:
    toml.dump(config, f)

このスクリプトを実行すると、config辞書に記述されたデータを含むconfig.tomlファイルがカレントディレクトリに生成されます。

TOMLファイルの読み込み

先ほど作成したTOMLファイルをtomlモジュールで読み取ってみましょう。

import toml

# TOMLファイルの読み込み
with open('config.toml', 'r') as f:
    config = toml.load(f)

# ファイルの値にアクセス
print('Database:', config['database'])
print('Server:', config['database']['server'])
print('Ports:', config['database']['ports'])

このスクリプトでは、まずtoml.load()を使ってTOMLファイルを読み込みます。configを辞書として扱うことで、設定値にアクセスできます。

hashlibで文字列をハッシュ化する

Pythonのhashlibライブラリはメッセージを安全にハッシュ化するためのわかりやすいインターフェイスを提供します。ハッシュ化とは、データを一意な値に変換することで、データ検索、パスワード保存、データ完全性検証、暗号化アプリケーションなどでよく使われます。

import hashlib

hashlibの基本的な使い方

hashlibの最も基本的な使い方の1つは与えられた文字列に対するハッシュを生成することです。例えば、次のようにすればメッセージのSHA256ハッシュを作成できます。

import hashlib

message = 'Hello, world!'
hashed_message = hashlib.sha256(message.encode()).hexdigest()

print(f'The SHA256 hash of "{message}" is: {hashed_message}')

このコードはメッセージ文字列を受け取り、それをバイトにエンコードし、SHA256を使ってハッシュ化し、ハッシュオブジェクトを読みやすいように16進数の文字列に変換しています。

さまざまなハッシュアルゴリズムを使う

hashlibは、SHA1、SHA224、SHA256、SHA384、SHA512、MD5など、さまざまなハッシュアルゴリズムに対応しています。hashlibモジュール内の適切な関数を呼び出すだけで、異なるアルゴリズムを使用できます。以下は、MD5ハッシュを作成する例です。

import hashlib

message = 'Hello, world!'
hashed_message = hashlib.md5(message.encode()).hexdigest()

print(f'The MD5 hash of "{message}" is: {hashed_message}')

異なるハッシュアルゴリズムには異なる特性があり、他のものより安全なものがあることを忘れないでください。ほとんどの用途ではSHA256が良い選択です。

hmacで認証コードを生成する

Pythonのhmacライブラリは鍵付きハッシュメッセージ認証コード(HMAC)を生成するための強力なツールです。HMACは、暗号化ハッシュ関数を用いてメッセージと秘密鍵を結合します。この仕組みは、データの完全性や真正性を保証するためによく使われます。

import hmac

hmacの基本的な使い方

HMACを作成するには、メッセージ、キー、ハッシュアルゴリズムを指定する必要があります。Pythonのhmacライブラリは、このプロセスを簡略化します。以下はその例です。

import hmac
import hashlib

message = b'Hello, world!'
key = b'secret_key'
hashed = hmac.new(key, message, hashlib.sha256)

print('HMAC:', hashed.hexdigest())

この例ではhmacモジュールのnew関数を使って、新しいHMACオブジェクトを作成し、キーとメッセージを渡し、ハッシュ関数としてSHA256を指定しています。メッセージとキーは文字列ではなくバイトでなければならないので、バイトリテラル(b'')を使っています。

hmacの注意点

鍵となる符号を他者に知られている場合は任意のメッセージに対して独自のHMACを生成でき、HMACの目的が達成されません。また、HMACにはSHA256のような安全なハッシュ関数を使用するのが一般的です。

また、hmacモジュールはcompare_digest関数を提供し、2つのダイジェストが等しいかどうかを安全に比較するために使用できることを忘れないでください。

import hmac
import hashlib

message = b'Hello, world!'
key = b'secret_key'
hashed1 = hmac.new(key, message, hashlib.sha256)
hashed2 = hmac.new(key, message, hashlib.sha256)

print('Are HMACs equal?', hmac.compare_digest(hashed1.digest(), hashed2.digest()))

この例では、compare_digestを使用して2つのHMACオブジェクトのダイジェストを比較し、同じであればTrue、そうでなければFalseを返しています。これは、==演算子とは異なり、タイミング攻撃に対して安全です。

secretsで秘密情報を扱う

Pythonの組み込みsecretsモジュールは、パスワード、アカウント認証、セキュリティトークン、および関連する秘密などのデータを管理するのに適した、暗号的に強い乱数を生成する便利なライブラリです。暗号化アプリケーションでは、これらの数値は安全なランダムパスワードやトークンの作成に使用されます。

import secrets

セキュアトークンを生成する

secretsモジュールの最もよく使われる機能の1つがセキュアトークンの生成です。ここでは指定したバイト数でランダムなURLセーフのテキスト文字列を生成する方法を紹介します。

import secrets

token = secrets.token_urlsafe(16)
print(token)

上の例では、token_urlsafe()関数が16バイトのランダムなURLセーフテキスト文字列を生成しています。

secretsの詳細

トークンを生成する以外にもsecretsモジュールを使って安全な乱数を生成できます。これは特にランダムなパスワードを作成するのに便利です。以下はその例です。

import secrets
import string

alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(10))

print(password)

上記の例では、パスワードの各文字の生成にsecrets.choice()関数が使われています。これは与えられたアルファベットからランダムに文字を選択し、パスワードの希望の長さのためにこのプロセスを繰り返します。これにより、生成される各パスワードの高いランダム性が確保されます。

ioで入出力周りを便利に扱う

Pythonではioモジュールが様々なタイプのI/O(入出力)を扱うための主要な機能を提供します。I/Oには、テキストI/O、バイナリI/O、生I/Oの3つの主要なタイプがあります。特定のユースケースに対しては動作を実装する様々な具象クラスが存在します。

import io

StringIOによるテキスト入出力

主要なクラスの1つであるStringIOを見てみましょう。このクラスはバッファ間で文字列の読み書きします。これは一時ファイルを必要とせず、メモリ内で文字列を操作するのに便利です。以下はその例です。

import io

output = io.StringIO()
output.write('This goes into the buffer. ')
print('And so does this.', file=output)

# 書き込まれた値を取得する
print(output.getvalue())

output.close()  # バッファメモリを破棄する

この例ではまずoutputというStringIOオブジェクトを作成します。そして、write()メソッドとprint()関数を使用して、このオブジェクトに書き込みを行います。最後に、getvalue()で全内容を取得しています。

BytesIOによるバイナリI/O

StringIOと同様に、BytesIOはバッファ(今回はstrではなくbytes)との間でバイトの読み書きするクラスです。以下はその例です。

import io

binary_output = io.BytesIO()
binary_output.write(b'This goes into the buffer. ')
binary_output.write(b'And so does this.\n')

# 書き込まれた値を取得する
print(binary_output.getvalue())

binary_output.close()  # バッファメモリを破棄する

この例では、BytesIOオブジェクトを作成し、そこにバイトを書き込んでいます。そして、getvalue()を使って内容を取得しています。バイトの書き込みと読み出しを行っているので、これを示すために文字列の前にbを付けています。

timeで時間を操作する

Pythonのtimeモジュールは時間に関連する様々な関数を提供します。タイムスタンプやプログラムの遅延を扱う必要があるとき、あるいは単に現在の時刻を知りたいときに役立つツールです。

import time

エポックからの時間

よく使われる関数にtime()があり、エポック(epoch)からの経過秒数を浮動小数点数で返します。エポックとはUTC(協定世界時)で1970年1月1日の始まりと定義されています。タイムスタンプを比較したり、あるコードにかかった時間を計測したりするときに使うことができます。

import time

seconds_since_epoch = time.time()
print("Seconds since epoch =", seconds_since_epoch)

このコードではエポック開始からの経過秒数が出力されます。

timeを使ってn秒間待機する

よく使う関数にsleep()があります。この関数は指定した秒数だけプログラムを待たせるものです。プログラムに遅延や一時停止を導入するのに便利です。

import time

print("これはすぐに表示されます。")
time.sleep(2.4)  # 2.4秒遅延させる
print("これは2.4秒待機後に表示されます。")

この例では、まずメッセージを表示し、2.4秒待って別のメッセージを表示しています。このコードを実行すると遅延があることに気がつくでしょう。

続きは下記リンクからご覧ください。

Pythonのよく使う標準ライブラリ一覧と使い方の例 その3

関連するコンテンツ