2010-06-29 74 views
5

我有一个发生器用于大量物品。我想遍历他们一次,输出到一个文件。但是,对于我目前使用的文件格式,我首先必须输出我拥有的项目数量。我不想在内存中创建这些项目的列表,因为它们太多了,而且会花费大量的时间和内存。有没有一种方法来遍历生成器,获得它的长度,但以某种方式能够稍后再次遍历它,获得相同的项目?Python:获取发生器中物品的数量而不存储物品

如果不是这样,我能想出什么其他解决了这个问题?

回答

5

如果你能弄清楚如何只写一个公式来计算基于该控制发电机的参数大小,做到这一点。否则,我认为你不会节省很多时间。

这里包括发电机,我们会尽力为你做!

+0

啊是的,我i realiezd这不久后我发布=) – Claudiu 2010-06-29 23:38:57

5

这不能做。一旦发电机耗尽,需要重新构建以便再次使用。如果提前知道项目数,则可以在迭代器对象上定义__len__()方法,然后可以针对迭代器对象调用len()

5

我不认为这是可能的任何广义迭代器。你需要弄清楚发电机最初是如何构造的,然后再进行最终传递。

或者,你可以写出来的虚拟大小的文件,写入项目,然后重新打开进行修改的文件,并更正标题的大小。

如果你的文件是二进制格式,这可能工作得很好,因为大小的字节数是相同的,不管实际大小是多少。如果是文本格式,如果您无法填充虚拟大小以覆盖所有情况,则可能需要为该文件添加一些额外的长度。有关使用Python在文本文件中插入和重写的讨论,请参阅this question