2014-08-28 113 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