逐列组合CSV文件

时间:2013-11-13 04:26:30

标签: python ubuntu csv memory-management merge

假设我在A中有两个名为BPython的CSV文件。

A的{​​{1}}看起来像是:

head

headerNameA1,headerNameA2 1.12412424,1 1,1 1,1 1,1 的{​​{1}}看起来像是:

B

我的目标是将两者合并到一个文件head中。但是,我的目标也是不将它们加载到RAM ,因为它们是大文件。结果 headerNameB1,headerNameB2 1,1 1,1 1,1 1,1 将是:

C

如果解决方案可以组合多个CSV文件,则会获得积分。但是,如果在解决方案中无法做到这一点 ,因为我总是可以将C headerNameA1,headerNameA2,headerNameB1,headerNameB2 1.12412424,1,1,1 1,1,1,1 1,1,1,1 1,1,1,1 组合在一起,然后将C组合起来。无限制地制作D

解决方案可以D为基础,E基于Python中的terminal

1 个答案:

答案 0 :(得分:4)

您可以从两个文件一次消耗一行,将它们连接在一起并写入outfile。 csv模块使事情变得更清晰。

import csv
with open('A','rb') as f1, open('B','rb') as f2, open('out.csv','wb') as w:
    writer = csv.writer(w)
    r1,r2 = csv.reader(f1),csv.reader(f2)
    while True:
        try:
            writer.writerow(next(r1)+next(r2))
        except StopIteration:
            break

正如@RogerPate指出的那样,如果你在python3中,你可以使用itertools.izip(仅zip)来实现这一点。

from itertools import izip
import csv
with open('A','rb') as f1, open('B','rb') as f2, open('out.csv','wb') as w:
    writer = csv.writer(w)
    for r1,r2 in izip(csv.reader(f1),csv.reader(f2)):
        writer.writerow(r1+r2)