Python 2.7.5 Win/Mac。如何使用列表目錄和路徑優化來優化搜索?
我試圖尋找到多個存儲器(約128Tio)搜索文件(10000)的最佳方式。這些文件有特定的擴展名,我可以忽略一些文件夾。
這是我與os.listdir
和遞歸第一個功能:
count = 0
def SearchFiles1(path):
global count
pathList = os.listdir(path)
for i in pathList:
subPath = path+os.path.sep+i
if os.path.isfile(subPath) == True :
fileName = os.path.basename(subPath)
extension = fileName[fileName.rfind("."):]
if ".ext1" in extension or ".ext2" in extension or ".ext3" in extension:
count += 1
#do stuff . . .
else :
if os.path.isdir(subPath) == True:
if not "UselessFolder1" in subPath and not "UselessFolder1" in subPath:
SearchFiles1(subPath)
它的工作原理,但我認爲它可能是更好的(更快和正確的)還是我錯了?
所以,我想os.path.walk
:
def SearchFiles2(path):
count = 0
for dirpath, subdirs, files in os.walk(path):
for i in dirpath:
if not "UselessFolder1" in i and not "UselessFolder1" in i:
for y in files:
fileName = os.path.basename(y)
extension = fileName[fileName.rfind("."):]
if ".ext2" in extension or ".ext2" in extension or ".ext3" in extension:
count += 1
# do stuff . . .
return count
「數」 是錯誤的,一種方式速度較慢。我想我不太瞭解path.walk
是如何工作的。
我的問題是:我能做些什麼來優化這個研究?
感謝你的例子,我改進了第一個解決方案(os.path.splitext和比較字符串到元組內容)。速度更快一些,我們可以輕鬆添加更多規則(文件分機/忽略子目錄)。 – Syrius
對於第二個解決方案,我沒有設法使其工作。首先,我猜這是第7行中的'useless_dirs',但是我得到了錯誤:'ValueError:list.remove(x):x not in list'。 我添加了「打印名稱」,並看到它嘗試從子目錄中刪除useless_dirs [x],即使它不存在。 – Syrius
@Syrius我的不好...當我應該使用'&'時,我使用了'和'。 – tdelaney