我有一个巨大的数据文件(~2G),需要拆分成奇数行和偶数行,分别处理并写入两个文件,我不想将整个文件读入RAM,所以我认为生成器应该是一个合适的选择。简而言之,我想做这样的事情:
lines = (l.strip() for l in open(inputfn))
oddlines = somefunction(getodds(lines))
evenlines = somefunction(getevens(lines))
outodds.write(oddlines)
outevens.write(evenlines)
这可能吗?显然,索引将不起作用:
^{pr2}$
请注意,这将需要扫描文件两次,因为这些文件不是设计为并行运行的。但是,它确实导致了更简单的代码。(另请注意,这里的“奇数”行是索引为1、3、5的行,这意味着由于索引为零,第一行是“偶数”行。)
正如Ashwini所说,您也可以使用
itertools.islice
来完成这项工作。在使用
itertools.islice
分割迭代器:如果只想读取文件一次,请编写一个生成器,它包装
file
,并返回一个标志,指示该行与从文件中读取的实际行是偶数还是奇数。在用法:
^{pr2}$这可以通过将输出文件对象存储在可索引容器中来进一步简化:
^{3}$相关问题 更多 >
编程相关推荐