我在內存中存儲/緩存文件系統(僅限文件名)以便能夠快速研究à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