対応環境
- エディション:Windows 10 Pro
- バージョン:20H2
背景と課題
Pythonで作業をしていると、フォルダ内に大量のファイルが溜まることがあります。
ファイル名の先頭を判定するstartswith()、
末尾を判定するendswith()を使えば、分類は容易でした。
しかし、ファイル名の途中に含まれる文字列でファイルを振り分ける方法が分からず、今回新たに学習しました。
解決策:部分一致には「in」を使う
ファイル名の中間部分に特定のキーワードが含まれているかを調べるには、inを使います。
以下、サンプルプログラムをご紹介します。
想定シチュエーションは、デスクトップの「data」フォルダに多数のファイルが格納されているケースです。
import os
os.chdir("C:/Users/mori/デスクトップ/data/")
files = os.listdir()
file_search = "L"
i = 0
file_list = []
for read_name in files:
if file_search in files[i]:
file_list.append(read_name)
i = i + 1
else:
i = i + 1
プログラムの詳細説明
(空白行は省略しています)
1行目、osライブラリをインポートしています。
2行目、os.chdir()を使って、デスクトップ上の「data」フォルダにパスを移動しています。
3行目、対象フォルダ内のファイル一覧を、files変数に格納しています。
4行目、分別対象となるキーワード「L」を、file_search変数に代入しています。
5行目、カウンタ変数iを0で初期化しています。
6行目、条件を満たすファイル名を格納するための空リストfile_listを用意しています。
7行目、forループで、filesリストからファイル名を1つずつread_nameに代入して処理しています。
8行目、if文を使い、ファイル名にfile_searchが含まれているかを判定しています。
9行目、条件がTrueの場合、ファイル名をfile_listに追加しています。
10行目、カウンタ変数iに+1しています。
11行目、条件がFalseだった場合の分岐(特に処理はしていません)です。
12行目、カウンタ変数iに+1しています。
プログラムの最後に次のコードを追加すれば、結果を確認できます。
print(file_list)
条件に一致するファイルだけが表示されるはずです。
また、4行目のキーワード("L")を任意の文字列に変更することで、
別の条件でもファイル抽出が可能です。
inで苦戦したポイント
特に戸惑ったのは、inの記述方法でした。
startswith()やendswith()は括弧内にキーワードを記述するだけでしたが、inには括弧がなく、どのように使用すればよいか分かりませんでした。
最終的に、
「”キーワード” in “ファイル名”」
という形で記述することで、問題を解決できました。
まとめ:Pythonで大量ファイルを効率的に分類するには
Pythonでフォルダ内の大量のファイルを効率よく分類するには、startswith()やendswith()に加えて、in演算子による部分一致検索が非常に有効です。
特定のキーワードを含むファイルを抽出・整理したい場合に、今回の手法は大いに役立ちます。
ぜひ、実際の作業で活用してみてください。
最後までご覧いただき、誠にありがとうございました。
