逐列合并CSV文件
问题内容:
假设我有两个叫CSV文件A
,并B
在Python
。
A
的head
模样:
headerNameA1,headerNameA2
1.12412424,1
1,1
1,1
1,1
B
的head
模样:
headerNameB1,headerNameB2
1,1
1,1
1,1
1,1
我的目标是将两者合并为一个文件C
。但是,我的目标 也不是将它们加载到RAM中, 因为它们是大文件。结果C
将是:
headerNameA1,headerNameA2,headerNameB1,headerNameB2
1.12412424,1,1,1
1,1,1,1
1,1,1,1
1,1,1,1
如果解决方案可以合并多个CSV文件,则可以加分。但是,如果在解决方案中不可能做到这一点,那是 很好的
,因为我总是可以将其他任何东西与C
makeD
结合起来,然后再将其他任何东西与D
makeE
无限地结合起来。
解决方案可以Python
基于或terminal
基于os.system
in Python
。
问题答案:
您可以一次从两个文件中消耗一行,将它们连接在一起并写入外文件。该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指出的那样,您可以使用itertools.izip
(就像zip
您在python3中一样)进行此处理
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)