遍历 Python 目录中的无限文件



我正在使用Python 3.3。

如果我正在操作目录中潜在的无限文件(请耐心等待;假设我有一个支持它的文件系统),如何在不遇到 MemoryError 的情况下做到这一点?我只希望一次一个文件的字符串名称在内存中。我不希望它们都在可迭代对象中,因为当太多时会导致内存错误。

os.walk() 会正常工作吗,因为它返回了一个生成器?或者,发电机不是那样工作的吗?

这可能吗?

如果你有一个可以用计算来命名文件的系统,你可以这样做(这会迭代任意数量的编号 txt 文件,一次只有一个在内存中;你可以转换为另一个可计算的系统以获得更短的大数字文件名):

import os
def infinite_files(path):
    num=0;
    while 1:
        if not os.path.exists(os.path.join(path, str(num)+".txt")):
            break
        else:
            num+=1 #perform operations on the file: str(num)+".txt"



[我的旧不适用答案如下]

glob.iglob似乎完全按照问题的要求去做。[编辑:它没有。它实际上似乎比listdir()效率低,但请参阅上面的替代解决方案。来自官方文档:

glob.glob(pathname, *, recursive=False)
返回与路径名匹配的路径名的可能为空的列表,该列表必须是包含路径规范的字符串。路径名可以是绝对的(如/usr/src/Python-1.5/Makefile)或相对的(如../../Tools/*/*.gif),并且可以包含 shell 样式的通配符。损坏的符号链接包含在结果中(如在外壳中)。


glob.iglob(pathname, *, recursive=False)
返回一个迭代器,该迭代器生成与glob()相同的值,而实际上没有同时存储它们。

iglob返回一个"产生迭代器",或者更简洁地说,返回一个生成器。

由于glob.iglobglob.glob 具有相同的行为,因此您可以使用通配符进行搜索:

import glob
for x glob.iglob("/home/me/Desktop/*.txt"):
    print(x) #prints all txt files in that directory

我看不到在不手动操作的情况下区分文件和目录的方法。然而,这当然是可能的。

相关内容

  • 没有找到相关文章