在目录非常大的情况下使用Python列出文件
我正在用Python处理很多文件。首先,我需要获取一个目录下所有文件的列表。目前,我使用的是:
os.listdir(dir)
但是,这样做不太可行,因为我搜索的目录里有超过81,000个文件,总大小接近5GB。
有没有什么好的方法可以一个一个地处理这些文件?而不是让Windows认为Python程序没有响应然后把它杀掉?因为这种情况经常发生。
我是在一台32位的Windows XP机器上运行这个程序,所以显然它不能使用超过4GB的内存。
有没有其他人有什么想法来解决这个问题?
2 个回答
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()
函数提供的额外文件信息。
有一个被接受的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