Pythonで安全なファイル名に変換する正規表現Tips
Pythonでファイル名を扱う際、不正な文字が含まれているとエラーの原因になります。
特にWindowsでは \ / : * ? " < > | のような文字が使えません。
(今回末端の空白と.も削除してます。)
そこで、安全なファイル名に整形するための関数 sanitize_filename() を紹介します。
import re
def sanitize_filename(name: str, replace_char: str = "_") -> str:
"""
ファイル名として使えない文字を指定の文字で置換する
Parameters:
name (str): 元の文字列
replace_char (str): 置換後の文字(デフォルトはアンダースコア)
Returns:
str: 安全なファイル名
"""
# Windowsで使えない文字一覧(他OSでも概ね共通)
invalid_chars = r'[\\/:*?"<>|]'
# 正規表現で一括置換
safe_name = re.sub(invalid_chars, replace_char, name)
# 末尾の空白やピリオドも削除(Windows対策)
safe_name = safe_name.rstrip(" .")
return safe_name
使用例
filename = 'example? ver 1*'
safe_filename = sanitize_filename(filename)
print(safe_filename)
# replace_char="-" (アンダーバー以外に変換する場合)
# 出力: example_ ver 1_
このようにして、スクリプトで生成するファイル名やログ出力名を安全に扱えるようにしましょう。
注意: ファイルシステムによって許可される文字は異なるので、用途に応じて調整が必要です。