当目录很大时,在Python目录中列出文件

时间:2014-08-28 14:09:38

标签: python file sorting directory size

我试图处理Python中的许多文件。我首先需要获取单个目录中所有文件的列表。目前,我正在使用:

os.listdir(dir)

然而。这是不可行的,因为我搜索的目录中有81,000个文件,总计差不多有5千兆字节。

逐步浏览每个文件的最佳方法是什么?没有Windows决定Python进程没有响应并杀死它?因为这往往会发生。

它在32位Windows XP计算机上运行,​​因此它显然无法索引超过4 GB的RAM。

任何其他想法都可以解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用glob.iglob来避免将整个文件名列表读入内存。这将返回一个生成器对象,允许您逐个遍历目录中的文件名:

import glob

files = glob.iglob(pathname\*)

for f in files:
    # do something with f