@Shadowによって提案glob("**/filename")
アプローチがうまく動作しない場合は、あなたがで作業ディレクトリのインデックスを作成することもできます。
import pickle
from collections import defaultdict
# run this once
index = defaultdict(str)
for path_to_file, file_name in walk(search_dir):
index[file_name] += '{};'.format(path_to_file)
pickle.dump(index, 'index.bin')
# load index
index = pickle.load('index.bin')
# run this to get semicolon-separated list of paths that end with the file
paths = index['my_file.txt']
for path in paths.split(';')[:-1]:
# do stuff with the file
ファイルのISNの「数十万」それは大量であり、パスの長さに応じてRAMで約10-100Mbを要します。私はdefaultdict(str)
を使用してメモリ使用量を短く予測しますが、defaultdict(list)
またはdefaultdict(tuple)
でも試してみることができます。
このアプローチの実行速度のアイデアを得るために、あなたはこれを試すことができます。
>>> d = {
'file_{}.csv'.format(i): '/home/user/data/{};/home/user/backup;'.format(i)
for i in range(500000)
}
>>> d['file_4021.csv']
'/home/user/data/4021;/home/user/backup;'
は 'グロブ(「** /ファイル名」)あなたのために'働くだろうか? – Shadow
検索の絞り込みにディレクトリ名を使用できますか?または、異なるファイルに対して同じディレクトリ構造の複数の検索を行う場合は、ファイル名のインデックス付けを実装することができます。 –