randomモジュールによる乱数生成とデータ選択
Pythonのrandomモジュールは、様々なパターンの乱数を生成するための機能を提供します。
import random
# 0.0 以上 1.0 未満の浮動小数点数を生成
random.random()
# 指定範囲内の整数をランダムに選択(例: 1〜10)
random.randint(1, 10)
# 指定範囲内の浮動小数点数を生成(例: 1.5〜7.8)
random.uniform(1.5, 7.8)
# シーケンスから無作為に1要素を選択
random.choice(['apple', 'banana', 'cherry'])
# シーケンスから複数の要素を重複なしでサンプリング
random.sample(range(100), k=5)
# リスト内の要素をシャッフル(破壊的変更)
items = [1, 2, 3, 4, 5]
random.shuffle(items)
文字列ベースの認証コード生成
英数字混合の動的認証コードを生成する関数の実装例:
def generate_auth_code(length):
code_chars = []
for _ in range(length):
# 数字 (0-9)
digit = str(random.randint(0, 9))
# 大文字アルファベット (A-Z)
upper = chr(random.randint(65, 90))
# 小文字アルファベット (a-z)
lower = chr(random.randint(97, 122))
# 3種類の中から無作為に1文字を選択
selected_char = random.choice([digit, upper, lower])
code_chars.append(selected_char)
return ''.join(code_chars)
# 使用例:8桁の認証コードを生成
auth_code = generate_auth_code(8)
print(auth_code) # 出力例: A3k9MxP2
osモジュールによるファイルシステム操作
オペレーティングシステムとの連携を可能にするosモジュールの主な用途です。
ディレクトリ操作
import os
# 単一階層のディレクトリ作成
os.mkdir('new_folder')
# 複数階層のディレクトリ作成(ネスト可)
os.makedirs('parent/child/grandchild', exist_ok=True)
# 空のディレクトリを削除
os.rmdir('empty_dir')
# 階層的に空ディレクトリを削除
os.removedirs('dir1/dir2/dir3') # 上位ディレクトリも空なら削除
パス操作とファイル情報取得
# スクリプトの配置されているディレクトリを取得
current_dir = os.path.dirname(__file__)
# パスの結合(OS依存の区切り文字を自動処理)
config_path = os.path.join(current_dir, 'config', 'settings.json')
# 指定ディレクトリ内の全ファイルをリスト表示
files = os.listdir('/path/to/directory')
# ファイル属性の確認
os.path.exists(config_path) # 存在チェック
os.path.isfile(config_path) # ファイルか?
os.path.isdir(config_path) # ディレクトリか?
os.path.getsize(config_path) # サイズ(バイト)
# カレントワーキングディレクトリの取得と変更
current_path = os.getcwd()
os.chdir('/new/working/directory')
sysモジュール:Pythonインタプリタとのインターフェース
sysモジュールはPythonランタイム環境に関する情報を提供します。
import sys
# モジュール検索パスの表示
print(sys.path)
# Pythonバージョン情報
print(sys.version)
# OSプラットフォーム識別子
print(sys.platform) # 例: 'win32', 'linux', 'darwin'
# コマンドライン引数の取得
if len(sys.argv) >= 3:
user = sys.argv[1]
pwd = sys.argv[2]
if user == 'admin' and pwd == 'secret':
print("ログイン成功")
else:
print("認証失敗")
else:
print("使用法: python script.py <user> <password>")
jsonモジュールによるデータの直列化
構造化データをJSON形式で保存・復元する方法です。言語間のデータ交換に適しています。
import json
# Pythonオブジェクト → JSON文字列(シリアライズ)
data = {
'name': '山田太郎',
'age': 32,
'skills': ['Python', 'JavaScript', 'SQL']
}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
# JSON文字列 → Pythonオブジェクト(デシリアライズ)
parsed_data = json.loads(json_str)
# ファイルへの直接書き込み/読み込み
with open('user_data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open('user_data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
subprocessモジュールによる外部コマンド実行
他のプロセスを起動し、その出力を取得することが可能です。
import subprocess
# システムコマンドを実行(Windows例)
result = subprocess.Popen(
'ipconfig',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# 成功時の出力をデコードして取得(日本語環境対応)
stdout_data = result.stdout.read().decode('cp932')
stderr_data = result.stderr.read().decode('cp932')
print("標準出力:\n", stdout_data)
if stderr_data:
print("エラー出力:\n", stderr_data)
設定データの永続化実装例
ユーザー入力を受け付け、JSON形式でローカルに保存する処理:
import os
import json
BASE_DIR = os.path.dirname(__file__)
DB_DIR = os.path.join(BASE_DIR, 'db')
os.makedirs(DB_DIR, exist_ok=True)
def save_user_profile(username, password):
file_path = os.path.join(DB_DIR, f'{username}.json')
profile = {'username': username, 'pwd': password}
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(profile, f, ensure_ascii=False, indent=2)
# 実際の使用
# uname = input('ユーザー名: ')
# passwd = input('パスワード: ')
# save_user_profile(uname, passwd)