python加入两个csv文件

时间:2012-08-02 21:30:27

标签: python csv

我有两个.csv文件,headers.csvcorrected.csvheaders.csv包含所有标题,corrected.csv只是一堆有组织的数据。

headers.csv:           
displacement, load, cputime, ...

corrected.csv:            
-990.478170,-0.000026,15:08:06, ...              
-990.038170,-0.000026,15:08:06, ...

The end goal is to be like this example:      
displacement,load,cputime, ...          
-990.478170,-0.000026,15:08:06, ...              
-990.038170,-0.000026,15:08:06, ...

我有什么:

headers = [x for x in csv.reader(open('headers.csv', 'rb'))]
writer = csv.writer(open('merged.csv', 'wb'))
writer.writerow(headers)
for row in csv.reader(open('corrected.csv', 'rb')):
    writer.writerow(row)

然而,结果是"['displacement', 'load', 'cputime', ...]"全部写入A列,而我想要在A列中移位,在B列中加载,在C列中加载cputime等等。我还想摆脱{ {1}}所以最终结果与我上面的例子完全一样。提前谢谢!

4 个答案:

答案 0 :(得分:2)

假设您有一行以逗号分隔的列名,请尝试:headers = next(csv.reader(open('headers.csv')))

答案 1 :(得分:2)

使用python连接文件似乎有点矫枉过正 -

cat headers.csv corrected.csv > merged.csv

如果您因某种原因想要使用Python,Jon Clements有正确的想法。

答案 2 :(得分:1)

在第一行中,您将创建一个列表(一个理解列表),其中包含headers.csv中的所有行,这就是您拥有[]等的原因。

尝试这个(从我的脑海中开始):

headers = csv.reader(open('headers.csv', 'rb'))[0]

哪个应该只返回第一行。

答案 3 :(得分:1)

我只是隐藏了csv模块中有多个文件的事实:

import csv

def cat(*files):
    for f in files:
        with open(f) as fobj:
            for line in fobj:
                yield line

writer = csv.writer(open('merged.csv', 'wb'))
for row in csv.reader(cat('headers.csv', 'corrected.csv')):
    writer.writerow(row)