環境
Windowsの仕様
エディション:Windows 10 Pro
バージョン:20H2
経緯
pythonを使っていて、フォルダに大量のファイルがありました。
初めの文字は「startswith()」、
最後の文字は「endswith()」、
で、分別できたけど、真ん中あたりにある文字を検出して、ファイルを分けれないか、
今回、勉強しました。
部分一致の「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」という変数に2行目で取得したパスを代入してます。この中に大量のファイルが入っています。
4行目、ここで分別したいキーワードを”L”をfile_searchに代入してます。
5行目、カウンタ変数iに0を代入しています。
6行目、「file_list」という空のリストを用意します。この空のリストにファイルを入れていくイメージです。
7行目、for文です。3行目で取得したパス(ファイル)を「read_file」に入れていくイメージです。
8行目、if文です。ここで部分一致のinを使います。file_searchは4行目で決めたキーワードです。ここでは”L”になります。
9行目、8行目のif文でTrueだった場合はfile_listにどんどん入れられてます。
10行目、カウンタ変数iに+1しています。
11行目、if文の分岐です。8行目のif文でFlase場合の処理を書きます。
12行目、 カウンタ変数iに+1しています。
これでプログラムは終わりです。
こんな感じで分別できました。
この後の行にprint(file_list)と入力すると、ちゃんと入ってるかわかると思います。
4行目の”L”を変えるとファイル名の一部を認識して、ファイルが取得できますよ。
苦戦したところ
inってどこにいれるの?
startswith()やendswith()では、
()の中にキーワードを入れたら、よかったのですが、
inには()なんてないから、どうしていいかわかりませんでした。
“キーワード” in “ファイルフォルダ”でよいことにたどり着くのに時間がかかりました。
ここまで読んでいただきありがとうございました。