2024-05-29 06:23:37 发布
网友
我使用的是python3.3。在
如果我在操作一个目录中潜在的无限多个文件(请容忍我;假设我有一个支持它的文件系统),我如何在不遇到内存错误的情况下做到这一点?我只希望一个文件的字符串名一次在内存中。我不希望它们都在iterable中,因为太多会导致内存错误。在
威尔手术室步行()工作正常,因为它返回了一个发电机?或者,发电机不是那样工作的吗?在
这可能吗?在
编辑:如果你有一个系统来命名可以计算出来的文件,你可以这样做(这将迭代任何数量的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()效率低,但请参阅上面我的另一种解决方案。]引用Python文档:“返回一个迭代器,它生成与glob()相同的值,而不实际同时存储它们。”由于它使用了世界yield,因此他们在这里使用生成器是理所当然的,而且spinlok声明生成器的用途是正确的。下面是我引用的Python文档URL:
glob.iglob
listdir()
glob()
yield
spinlok
https://docs.python.org/3.4/library/glob.html
注意,glob.iglob的工作原理与glob.glob一样。所以你可以用通配符搜索你的路径:例如
glob.glob
我看不出一种方法可以在不手动的情况下区分文件和目录。然而,这当然是可能的。在
编辑:如果你有一个系统来命名可以计算出来的文件,你可以这样做(这将迭代任何数量的txt文件,一次只有一个在内存中;你可以转换到另一个可计算的系统,以获得较短的文件名为大数):
[编辑:我以前不适用的答案如下:]
glob.iglob
似乎完全符合问题的要求。[编辑:它没有。它实际上似乎比listdir()
效率低,但请参阅上面我的另一种解决方案。]引用Python文档:“返回一个迭代器,它生成与glob()
相同的值,而不实际同时存储它们。”由于它使用了世界yield
,因此他们在这里使用生成器是理所当然的,而且spinlok
声明生成器的用途是正确的。下面是我引用的Python文档URL:https://docs.python.org/3.4/library/glob.html
注意,
^{pr2}$glob.iglob
的工作原理与glob.glob
一样。所以你可以用通配符搜索你的路径:例如我看不出一种方法可以在不手动的情况下区分文件和目录。然而,这当然是可能的。在
相关问题 更多 >
编程相关推荐