我有一个磁盘阵列,其中包含几个TB组织不良的文件。
python程序需要按名称访问文件,每次进行完整搜索都非常耗时。
我所做的是在文件上构建缓存并搜索缓存。
当前代码如下:
pickle_file = 'fscopy.pickle'
if os.path.exists(pickle_file):
# fscopy = pickle.load(pickle_file)
with open(pickle_file, 'r') as infil:
fscopy = json.load(infil)
else:
# extl = {'mp3', 'PDF', 'prc', 'docx', 'txt', 'jpg', 'cue', 'pdf', 'zip', 'iso', 'nfo', 'odt', '7z', 'azw3', 'djvu',
# 'lit', 'Pdf', 'rtf', 'bin', 'wv', 'doc', 'chm', 'RAR', 'epub', 'pdF', 'gz', 'cbz', 'cbr', 'rar', 'mobi',
# ' odt rar', 'ZIP'}
extl = {'.PDF', '.zip', '.7z', '.Pdf', '.wv', '.RAR', '.epub', '.pdF', '.gz', '.rar', '.mobi', '.ZIP'}
fscopy = list()
def walk(r):
for r, dl, fl in os.walk(r):
gfl = list()
for file in fl:
_, e = os.path.splitext(file)
if e in extl:
gfl.append(file)
if len(gfl) > 0:
fscopy.append((r, gfl))
else:
pass
walk('/srv/store')
walk('/srv/private')
# pickle.dump(pickle_file, fscopy)
with open(pickle_file, 'w') as outfil:
json.dump(fscopy, outfil, indent=4)
def ffind(f):
for root, fl in fscopy:
if f in fl:
return os.path.join(root, f)
return None
我想知道是否有更好的方法(或者一些预先构建的lib)。