使用python将一个csv文件的内容附加到另一个文件

时间:2010-07-12 04:58:00

标签: python csv

我有2个csv文件:

  • output.csv
  • output1.csv

output.csv有5列标题 output1.csv有大约40列不同类型的数据。

我需要将output1.csv的所有内容追加到output.csv。我怎么能这样做?
有人可以给我一个如何去做的提示吗? 我有以下代码:

reader=csv.DictReader(open("test.csv","r"))
allrows = list(reader)

keepcols = [c for c in allrows[0] if all(r[c] != '0' for r in allrows)]

print keepcols
writer=csv.DictWriter(open("output.csv","w"),fieldnames='keepcols',extrasaction='ignore')
writer.writerows(allrows)

    with open("test1.csv","r") as f:
        fields=next(f).split()
        # print(fields)
        allrows=[]
        for line in f:
            line=line.split()
            row=dict(zip(fields,line))
            allrows.append(row)
            # print(row)
        keepcols = [c for c in fields if any(row[c] != '0' for row in allrows)]
        print keepcols
        writer=csv.DictWriter(open("output1.csv","w"),fieldnames=keepcols,extrasaction='ignore')
        writer.writerows(allrows)

test.csv生成output.csv
test1.csv生成output1.csv

我试图看看我是否可以让两个文件在同一个文件中生成我的输出..

3 个答案:

答案 0 :(得分:6)

如果我正确理解你的问题,你想创建一个包含41列的csv - 来自output.csv的1,后面是output1.csv中的40。 我假设他们有相同的行数(如果没有 - 什么是必要的行为?)

尝试使用csv模块:

import csv
reader = csv.reader(open('output.csv', 'rb'))
reader1 = csv.reader(open('output1.csv', 'rb'))
writer = csv.writer(open('appended_output.csv', 'wb'))
for row in reader:
    row1 = reader1.next()
    writer.writerow(row + row1)

如果您的csv文件使用特殊分隔符或引号进行格式化,则可以使用csv.reader和csv.writer对象的可选关键字参数。 有关详细信息,请参阅Python's csv module documentation

编辑:按照建议添加'b'标志。

答案 1 :(得分:2)

This最近的讨论与你正在寻找的内容非常相似,只是那里的OP想要连接mp3文件。

编辑:

import os, sys
target = '/path/to/target'
src1 = '/path/to/source1.csv'
src2 = '/path/to/source2.csv'
tf = open(target, 'a')
tf.write(open(src1).read())
tf.write(open(src2).read())
tf.close()

尝试这个,这应该有用,因为你只想做相当于cat src1 src2 > target的shell命令

答案 2 :(得分:0)

“我需要将output1.csv的所有内容附加到output.csv。” ...从字面上理解,这意味着在第一个文件中写入每一行,然后在第二个文件中写入每一行。这就是你想要的吗?

标题是什么?另一个文件中的40列??如果是这样,那么假设您希望将标题写为一行列标题:

import csv
titles = [x[0] for x in csv.reader(open('titles.csv', 'rb'))]
writer = csv.writer(open('merged.csv', 'wb'))
writer.writerow(titles)
for row in csv.reader(open('data.csv', 'rb')):
    writer.writerow(row)