2012-07-26 25 views
1

我正在使用下面的代碼遞歸地創建所有目錄的列表(文本文件)。由於有數以千計的子目錄,我不想一次又一次地創建列表,但想要更新/插入最近一次列出的新創建的列表。使用新代碼更新目錄列表

有沒有很好的方法來做到這一點?

import os, sys 
rootdir ="/store/user/" 
myusers=['u1','u2','u3','u4','u5','u6','u7'] 

for myuser in myusers: 
    rootuserdir=os.path.join(rootdir, myuser) 
    for myRoot, mySubFolders, myFiles in os.walk(rootuserdir): 
     for mySubFolder in mySubFolders: 
      dirpath = os.path.join(myRoot, mySubFolder) 
      print dirpath 
+0

你想要新的/刪除的目錄,這樣你就可以看到添加/刪除了什麼,或者你問這樣可以提高速度?正如@Sven Marnach在他的回答中提到的那樣,由於您仍然在整個目錄中運行os.walk(),因此您不會節省任何時間。 – ernie 2012-07-26 16:40:27

+0

是的,我需要更新的列表,因爲我會將它們上傳到數據庫,所以如果沒有其他方式重做它,我會這樣做。 – iamauser 2012-07-26 17:09:57

+0

正如@Jon Clements所提到的,這是真正的任務,inotify對於(至少在Linux系統上)是很好的,pyinotify提供了一個很好的python界面。 – ernie 2012-07-26 17:14:52

回答

2

通過嘗試增量更新文件夾列表不會保存任何內容。沒有有效的方法從文件中間刪除一行,也沒有插入一行。簡單地再次列出整個列表是最有效的方法,也是最簡單的方法。

0

試圖找到文件中的特定條目將比每次重新填充列表更加資源密集。

對於性能優化,總是試圖確定真正的瓶頸在哪裏,然後才能關注某個特定區域。比沒有更多的時間,當不使用這種方法時,你的焦點將會出現在錯誤的地方。

確定瓶頸或熱點應始終是重構代碼時的首要重點領域之一。通過這樣做,您將確保您專注於具有最高投資回報率和最少LOE的區域。一個經驗法則是,如果您可以使整個程序或至少其中的重要部分至少快兩倍,那麼您應該只嘗試重構代碼。 more...

0

您可以運行一次性進程以將信息緩存在某種數據庫(可能爲了簡化而定義一個文檔),然後在守護進程中使用pyinotify以保持數據庫同步。