在Python中迭代目录中的无限个文件

2024-05-29 06:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.3。在

如果我在操作一个目录中潜在的无限多个文件(请容忍我;假设我有一个支持它的文件系统),我如何在不遇到内存错误的情况下做到这一点?我只希望一个文件的字符串名一次在内存中。我不希望它们都在iterable中,因为太多会导致内存错误。在

威尔手术室步行()工作正常,因为它返回了一个发电机?或者,发电机不是那样工作的吗?在

这可能吗?在


Tags: 文件内存字符串目录错误情况iterable发电机
1条回答
网友
1楼 · 发布于 2024-05-29 06:23:37

编辑:如果你有一个系统来命名可以计算出来的文件,你可以这样做(这将迭代任何数量的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:

https://docs.python.org/3.4/library/glob.html

注意,glob.iglob的工作原理与glob.glob一样。所以你可以用通配符搜索你的路径:例如

^{pr2}$

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

相关问题 更多 >

    热门问题