Python:获取生成器中项目的数量而不存储这些项目

5
我有一个大量项目的生成器。我想遍历它们一次,将它们输出到文件中。然而,根据我当前拥有的文件格式,我首先必须输出我所拥有的项目数。我不想在内存中构建项目列表,因为它们太多了,这需要很长时间和大量内存。是否有一种方法可以遍历生成器并获取其长度,但又能够稍后再次遍历它以获取相同的项目?
如果没有,我还能想出什么其他解决方案来解决这个问题?
3个回答

5
如果你能够想出一种只需根据控制发电机的参数编写公式来计算大小的方法,请这样做。否则,我认为你不会节省太多时间。
在此处包含发电机,我们将尝试为您完成!

噢,是的,我发帖后很快就意识到了这一点 =) - Claudiu

5

这是不可能的。一旦生成器耗尽,就需要重建才能再次使用。如果事先知道项目数量,则可以在迭代器对象上定义__len__()方法,然后可以针对迭代器对象调用len()


5

我认为任何通用的迭代器都不可能做到这一点。你需要找出生成器最初是如何构建的,然后重新生成它以进行最终的传递。

或者,您可以向文件写入一个虚拟大小,写入项目,然后重新打开文件进行修改并在标头中更正大小。

如果您的文件是二进制格式,则这可能非常有效,因为无论实际大小如何,大小所需的字节数相同。如果是文本格式,则可能需要向文件添加一些额外长度,如果您不能填充虚拟大小以涵盖所有情况。有关使用Python在文本文件中插入和重写的讨论,请参见此问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接