2014-08-28 100 views
2

我正試圖在Python中處理很多文件。我首先需要獲取單個目錄中所有文件的列表。目前,我正在使用:當目錄很大時用Python列出目錄中的文件

os.listdir(dir) 

但是,這是不可行的,因爲我正在搜索的目錄中有超過81,000個文件,總計接近5千兆字節。

逐一瀏覽每個文件的最佳方法是什麼?沒有Windows決定Python進程沒有響應並將其殺死?因爲這往往會發生。

它在32位Windows XP機器上運行,很明顯,它不能索引超過4 GB的RAM。

任何其他想法可以解決這個問題嗎?

回答

1

您可以使用glob.iglob來避免將整個文件名列表讀入內存。這將返回一個生成器對象允許您通過一個通過你的目錄中的一個文件名步驟:

import glob 

files = glob.iglob(pathname\*) 

for f in files: 
    # do something with f 
3

您可能需要使用scandir模塊嘗試:

scandir是提供發電機的模塊版本的os.listdir() 也暴露了迭代目錄時操作系統 返回的額外文件信息。 scandir也提供了更多的 os.walk()版本,因爲它可以使用scandir()函數公開的額外文件 信息。

有一個accepted PEP建議將它合併到Python標準庫,所以它似乎有一定的牽引力。從自己的文件

簡單的使用例子:

def subdirs(path): 
    """Yield directory names not starting with '.' under given path.""" 
    for entry in os.scandir(path): 
     if not entry.name.startswith('.') and entry.is_dir(): 
      yield entry.name 
相關問題