【问题标题】:Listing files in a directory with Python when the directory is huge当目录很大时,使用 Python 列出目录中的文件
【发布时间】:2014-08-28 14:09:38
【问题描述】:

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

os.listdir(dir)

但是。这是不可行的,因为我正在搜索的目录中有超过 81,000 个文件,总计将近 5 GB。

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

它在 32 位 Windows XP 机器上运行,因此显然它不能索引超过 4 GB 的 RAM。

大家有什么其他想法可以解决这个问题吗?

【问题讨论】:

    标签: python file sorting directory size


    【解决方案1】:

    您可能想尝试使用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
    

    【讨论】:

      【解决方案2】:

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

      import glob
      
      files = glob.iglob(pathname\*)
      
      for f in files:
          # do something with f
      

      【讨论】:

        猜你喜欢
        • 2011-02-23
        • 2012-12-09
        • 2014-07-16
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 2023-03-03
        • 2016-07-11
        相关资源
        最近更新 更多