このブログではPythonを使ったスクレイピングを、初心者向けにサンプルコード付きで解説しています。以下に紹介する記事では、①から⑨のステップでスクレイピングの方法を学び、実践に役立てられるよう体系的にまとめています。
【①〜⑨まとめ】PythonでWebスクレイピングを実践する方法【サンプルコード付き】
このブログではPythonスクレイピングを初心者向けに解説していきます。順番に各記事で解説しており入門者向けです。サンプルコード付きで解説するので実践的…
この記事ではファイル名に適さない文字を削除・置換して、安全なファイル名を生成するための関数について解説します。
例として、こちらの記事では画像を自動ダウンロードする方法を紹介していますが、その際、画像を格納するフォルダ名にウェブサイトのタイトルや見出しなどを利用します。そこでファイル名に利用できない文字列、例えば「\」「/」「:」「*」などが含まれるとエラーになってしまいます。
今回紹介する関数を使って文字列を削除・置換することでエラーを回避できます。
コード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# ファイル名修正 def sanitize_filename(filename): # ファイル名に適さない文字列を削除する invalid_chars = ['/', '\\', '|', ':', '*', '"', '<', '>', '.', '\', '/', ':', '*', '<', '>', '|', '「', '」'] for char in invalid_chars: filename = filename.replace(char, '_') filename = filename.replace('?', '?') filename = filename.replace('【', '') filename = filename.replace('】', '') # ファイル名が60文字を超える場合、最初の60文字にカットする if len(filename) > 60: filename = filename[:60] return filename |
コード解説
不正な文字のリスト invalid_chars の定義
1 |
invalid_chars = ['/', '\\', '|', ':', '*', '"', '<', '>', '.', '\', '/', ':', '*', '<', '>', '|', '「', '」'] |
invalid_chars というリストには、ファイル名に使えない文字が含まれています。例えば、/ や \ はディレクトリの区切り文字として使われるため、ファイル名には使用できません。また、日本語の文字や一部の特殊記号もリストに含まれています(例: 「\」「/」「:」「*」など)
リストの文字列は状況に応じて調整してください。
不正な文字の置換
1 2 |
for char in invalid_chars: filename = filename.replace(char, '_') |
for ループを使用して、リスト内のすべての文字を _(アンダースコア)に置換します。こうすることで、不正な文字が含まれているファイル名でも問題なく使えるようになります。アンダースコア以外の有効な文字に変換してもいいですね。
特定の文字を置換する
1 2 3 |
filename = filename.replace('?', '?') filename = filename.replace('【', '') filename = filename.replace('】', '') |
invalid_charsリストでは全ての文字列をアンダースコアに置換していました。ここでは日本語の疑問符「?」を英語の疑問符「?」に置き換えたり、【】(角括弧)を完全に削除するなど、個別の処理しています。
特定のシステムでは問題を引き起こす可能性がある文字列を置換したい場合や、単純に好みの文字に置換したい場合などに使います。
ファイル名の文字数を調整
1 2 3 4 |
# ファイル名が60文字を超える場合、最初の60文字にカットする if len(filename) > 60: filename = filename[:60] return filename |
パス全体の長さに制限があること、そしてファイル名などの見やすさを考慮して、ファイル名の文字数を調整しています。
ここではファイル名が60文字を超えたらカットするように調整しています。
関数を実行
1 2 |
print(sanitize_filename('2024/09/01')) # 結果:2024_09_01 print(sanitize_filename('【スクレイピング?】')) # 結果:スクレイピング? |
このように、文字列を引数にすることで簡単に置換が完了します。
まとめ
今回紹介したsanitize_filename関数を使うことで、不正な文字列を一括で置換したり、個別に文字列を好きな文字列に置換することが可能となります。