我有2个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
我试图看看我是否可以让两个文件在同一个文件中生成我的输出..
答案 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)