前提・実現したいこと
ファイル名が列挙されたテキストファイルを読み込み、
特定ディレクトリ以下を再帰的に検索してそのパスを出力するプログラムを作成しています。
下にあるプログラムで検索・出力するところまでは出来たのですが、
出力されるパスのファイル名部分が小文字になってしまいます。
検索文字列は大文字、実際に存在するファイルの名前も大文字です。
どうすれば正しいパスが取得できるでしょうか。
該当のソースコード
python
1import csv 2from pathlib import Path, PurePath 3 4/* 5 search()を呼び出す過程で、下の変数には以下の値が入れられています。 6 listFile: 検索したいファイルの名前を列挙したテキストファイル 7 search_target_dir: 検索対象となるディレクトリ 8 9 最終的に返したいのは、 10 検索対象のファイル名,←のファイルが存在したディレクトリへのパス 11 が列挙されたcsvファイル 12*/ 13def search(listFile, search_target_dir): 14 f = open(listFile, 'r', encoding="utf-8") 15 reader = f.read().split('\n') 16 17 # 検索対象のパス 18 search_target_path = Path(search_target_dir) 19 20 iDir = Path(listFile).parent.resolve() 21 22 # 結果のcsvの出力先 23 resultFile = filedialog.asksaveasfilename(\ 24 filetypes = [("テキストファイル","*.csv")],\ 25 initialdir = iDir,\ 26 initialfile = "result",\ 27 defaultextension = ".csv",\ 28 title = "結果ファイルの出力") 29 30 w = open(resultFile, 'w') 31 writer = csv.writer(w, lineterminator='\n') 32 33 for line in reader: 34 # print(line) ここで表示されるファイル名は大文字 35 if list(search_target_path.glob("**/" + line)): 36 [ writer.writerow([line, p]) for p in search_target_path.glob("**/" + line) ] 37 # [ print(p) for p in search_target_path.glob("**/" + line) ] 38 # ここで表示されるパス名は小文字 39 else: 40 writer.writerow([line, ""]) 41 42 f.close() 43 w.close()
listFileとして呼ばれるテキストファイルの例
txt
1180903_A.jpg 2111111_ZA.jpg 3APPLE.jpg
上のファイルをE:\Users\XXX\画像 以下で検索した例
csv
1180903_A.jpg,E:\Users\XXX\画像\tmp\180903_a.jpg 2111111_ZA.jpg,E:\Users\XXX\画像\111111_za.jpg 3APPLE.jpg,E:\Users\XXX\画像\image\color\apple_jpg
補足情報(FW/ツールのバージョンなど)
Python 3.6.5
追記(20180911)
上ののコードの一部書き換えで不具合の回避ができましたので、共有いたします。
python
1- [ writer.writerow([line, p]) for p in search_target_path.glob("**/" + line) ] 2+ [ writer.writerow([line, p.with_name(line)]) for p in search_target_path.glob("**/" + line) ]

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/03 07:08
2018/09/10 07:23