我试图处理Python中的许多文件。我首先需要获取单个目录中所有文件的列表。目前,我正在使用:
os.listdir(dir)
然而。这是不可行的,因为我搜索的目录中有81,000个文件,总计差不多有5千兆字节。
逐步浏览每个文件的最佳方法是什么?没有Windows决定Python进程没有响应并杀死它?因为这往往会发生。
它在32位Windows XP计算机上运行,因此它显然无法索引超过4 GB的RAM。
任何其他想法都可以解决这个问题?
答案 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