【发布时间】:2014-06-22 00:57:59
【问题描述】:
我在使用 python 生成器处理文件中的文档时遇到问题。我需要处理的文件数量事先不知道。每个文件都包含消耗大量内存的记录。因此,生成器用于处理记录。这是我正在处理的代码的摘要:
def process_all_records(files):
for f in files:
fd = open(f,'r')
recs = read_records(fd)
recs_p = (process_records(r) for r in recs)
write_records(recs_p)
我的process_records 函数检查每条记录的内容,只返回具有特定发件人的记录。我的问题如下:我想计算read_records 返回的元素数量。我一直在使用列表跟踪 process_records 函数中的记录数:
def process_records(r):
if r.sender('sender_of_interest'):
records_list.append(1)
else:
records_list.append(0)
...
这种方法的问题是records_list 可以根据输入无限制地增长。我希望能够在 records_list 增长到某个点后使用它的内容,然后重新启动该过程。例如,处理完 20 条记录后,我想找出有多少条记录来自'sender_of_interest',有多少条记录来自其他来源并清空列表。我可以在不使用锁的情况下执行此操作吗?
【问题讨论】:
-
为什么不使用整数计数器而不是列表?
-
好像你可以让
read_records()检查sender,只返回那些感兴趣的。在这种情况下,您分配给recs的值返回的长度将是生成器将处理的数字。 -
是的,我可以。但我更喜欢你使用类的想法。我正在使用的代码是由其他人编写的,我不希望出于我的目的重构此代码。谢谢。
标签: python python-3.x generator counting