Python 按列组合CSV文件

Python 按列组合CSV文件,python,ubuntu,csv,memory-management,merge,Python,Ubuntu,Csv,Memory Management,Merge,假设在Python中有两个名为A和B的CSV文件 A的头看起来像: headerNameA1,headerNameA2 1.12412424,1 1,1 1,1 1,1 headerNameB1,headerNameB2 1,1 1,1 1,1 1,1 B的头看起来像: headerNameA1,headerNameA2 1.12412424,1 1,1 1,1 1,1 headerNameB1,headerNameB2 1,1 1,1 1,1 1,

假设在Python中有两个名为A和B的CSV文件

A的头看起来像:

 headerNameA1,headerNameA2
 1.12412424,1
 1,1
 1,1
 1,1
 headerNameB1,headerNameB2
 1,1
 1,1
 1,1
 1,1
B的头看起来像:

 headerNameA1,headerNameA2
 1.12412424,1
 1,1
 1,1
 1,1
 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结合起来,得到D,然后将其他任何东西与D结合起来,得到E,无穷大


解决方案可以基于Python,也可以通过Python中的os.system基于终端。

您可以一次使用两个文件中的一行,将它们连接在一起并写入输出文件。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来制作这款光滑的工具

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)

您可以一次使用两个文件中的一行,将它们连接在一起并写入输出文件。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来制作这款光滑的工具

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)

那么,您是在寻找粘贴-d的Python版本,f1.csv还是f2.csv?如果是的话,你看过csv模块了吗?那么你是在寻找Python版本的paste-d,f1.csv还是f2.csv?如果是,您是否查看了csv模块?对于itertools.izipcsv.readerf1、csv.readerf2:writer.writerowr1+r2@RogerPate美好的另外,在2.x和3.x中编写源代码使其在没有2to3或类似代码的情况下运行是徒劳的。不打算使用的示例代码不是示例。使用itertools.izip并在3.x中添加重命名为“zip”的注释会更好,反之亦然。这更简短、更容易理解,而且错误地使用注释比错误的示例要困难得多。请注意,在2的“wb”版本和3的“w”,newline=版本之间打开csv文件的方式存在差异,因此这比看起来更麻烦。对于itertools.izipcsv.readerf1中的r1、r2,csv.readerf2:writer.writerowr1+r2@RogerPate美好的另外,在2.x和3.x中编写源代码使其在没有2to3或类似代码的情况下运行是徒劳的。不打算使用的示例代码不是示例。使用itertools.izip并在3.x中添加重命名为“zip”的注释会更好,反之亦然。这更简短、更容易理解,而且错误地使用注释比错误的示例要困难得多。请注意,在2、'w',newline=3中的版本“wb”之间打开csv文件的方式存在差异,因此这比看起来更麻烦。