简体   繁体   English

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

[英]append content of one csv file to another using python

I have 2 csv files:我有 2 个 csv 文件:

  • output.csv输出.csv
  • output1.csv输出1.csv

output.csv has a 5 columns of titles. output.csv 有 5 列标题。
output1.csv has about 40 columns of different types of data. output1.csv 大约有 40 列不同类型的数据。

I need to append all the content of output1.csv to output.csv.我需要将 output1.csv 的所有内容附加到 output.csv 中。 How can I do this?我怎样才能做到这一点?
could somebody please give me a hint on how to go about it ???有人可以给我一个关于如何去做的提示吗???
i have the following code :我有以下代码:

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 generates output.csv test.csv 生成 output.csv
test1.csv generates output1.csv test1.csv 生成 output1.csv

im trying to see if i can make both files generate my output in the same file..我想看看我是否可以让两个文件在同一个文件中生成我的输出..

If I understand your question correctly, you want to create a csv with 41 columns - the 1 from output.csv followed by the 40 from output1.csv. 如果我正确理解你的问题,你想创建一个包含41列的csv - 来自output.csv的1,后面是output1.csv中的40。 I assume they have the same number of rows (if not - what is the necessary behavior?) 我假设他们有相同的行数(如果没有 - 什么是必要的行为?)

Try using the csv module: 尝试使用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)

If your csv files are formatted with special delimiters or quoting characters, you can use the optional keyword arguments for the csv.reader and csv.writer objects. 如果您的csv文件使用特殊分隔符或引号进行格式化,则可以使用csv.reader和csv.writer对象的可选关键字参数。 See Python's csv module documentation for details... 有关详细信息,请参阅Python的csv模块文档 ...

EDIT: Added 'b' flag, as suggested. 编辑:按照建议添加'b'标志。

This recent discussion looks very similar to what you are looking for except that the OP there wanted to concatenate mp3 files. 最近的讨论看起来非常相似,不同之处在于OP有希望来连接MP3文件,你在找什么。

EDIT: 编辑:

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()

try this, this should work since you simply want to do the equivalent of cat src1 src2 > target of shell command 试试这个,这应该工作,因为你只想做相当于cat src1 src2 > target shell命令的cat src1 src2 > target

"I need to append all the content of output1.csv to output.csv." “我需要将output1.csv的所有内容附加到output.csv。” ... taken literally that would mean write each row in the first file followed by each row in the second file. ...从字面上理解,这意味着在第一个文件中写入每一行,然后在第二个文件中写入每一行。 Is that what you want?? 那是你要的吗??

titles of what? 标题是什么? the 40 columns in the other file?? 另一个文件中的40列?? If this is so, then assuming that you want the titles written as a row of column headings: 如果是这样,那么假设您希望将标题写为一行列标题:

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)

You could also use a generator from the reader if you want to pass a condition:如果你想传递一个条件,你也可以使用阅读器的生成器:

import csv
def read_generator(filepath:str):
   with open(filepath, 'rb'):
     reader = csv.reader(f)
     for row in reader:
       if row[0] == condition:
         yield row

and then write from that with:然后用它写:

writer = csv.writer(open("process.csv", "rb"))
write.writerow(read_generator(file_to_read.csv))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM