我想在Python中搜索一个文件,但是,我正在寻找文件的目录包含许多子目录和数十万甚至数百万个文件。到目前为止,我使用了以下代码,但速度非常慢。有没有更快的方法来查找文件?
for root, dirs, files in os.walk(search_dir):
for name in files:
if desired_filename==name:
...
答案 0 :(得分:1)
如果@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
“数十万”的文件数量不是很大,并且在RAM中大约需要10-100 Mb,具体取决于路径长度。我正在使用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;'