我在内存中存储/缓存文件系统(仅限文件名)以便能够快速研究àla Everything。因此我不想使用操作系统的内置文件搜索GUI。文件系统的数据结构
我做:
import os
L = []
for root,dirs,files in os.walk(PATH):
L.append([root, files])
,结果是这样的:
[['D:\\', ['a.jpg', 'b.jpg']],
...
['D:\\Temp12', ['test.txt', 'test2.txt']]]
的问题是,做研究需要太多的时间,当L
将包含数百万个元素:
query = 'test2' #searching for filename containg this text
for dir in L:
for f in dir[1]:
if query in f:
print '%s found: %s' % (query, os.path.join(dir[0],f))
事实上,这是一个非常幼稚的搜索,因为它需要浏览ŧ他整个列表找到物品。
如何使查询速度更快?
也许看起来列表并不是正确的数据结构来做全文研究,有没有树状结构?
在Python中,我觉得'字典'是你正在寻找的东西! – Acepcs
@Acepcs:即使我使用字典'{'D:\\':['a.jpg','b.jpg'],...,'D:\\ Temp12':['test.txt ','test2.txt']}',我将不得不迭代所有数千个键/值来进行搜索......你能确切地记住你的想法吗? – Basj
我的脑海里恰好有一个完整的算法。当你浏览你的操作系统中的目录时,试着制作一个文件名字典,每个键是字母表中的一个字符,每个值都是一个以该字符开头的文件名列表,例如'{'a': ['a3.jpg','ab.jpg'],'b':['banana.gif','bad.jpg']}',所以通过建立前缀键可以节省大量的时间。如果你的数据量真的很大,你可以构建嵌套的前缀字典,就像在Python中实现的树(在一定程度上) – Acepcs