如何使用python逐行连接多个CSV文件?

时间:2016-12-20 05:54:32

标签: python csv

我有一个大约10个CSV文件的数据集。我想将这些文件逐行合并到一个CSV文件中。

我尝试了什么:

import csv
fout = open("claaassA.csv","a")
# first file:
writer = csv.writer(fout)
for line in open("a01.ihr.60.ann.csv"):
     print line
     writer.writerow(line)
# now the rest:    
for num in range(2, 10):
    print num
    f = open("a0"+str(num)+".ihr.60.ann.csv")
#f.next() # skip the header
for line in f:
     print line
     writer.writerow(line)
#f.close() # not really needed
fout.close()

2 个答案:

答案 0 :(得分:0)

我不完全理解您使用库csv的原因。实际上,用给定文件中的行填充输出文件就足够了(它们具有相同的列'鬃毛和订单)。

input_path_list = [
    "a01.ihr.60.ann.csv",
    "a02.ihr.60.ann.csv",
    "a03.ihr.60.ann.csv",
    "a04.ihr.60.ann.csv",
    "a05.ihr.60.ann.csv",
    "a06.ihr.60.ann.csv",
    "a07.ihr.60.ann.csv",
    "a08.ihr.60.ann.csv",
    "a09.ihr.60.ann.csv",
]
output_path = "claaassA.csv"

with open(output_path, "w") as fout:
    header_written = False

    for intput_path in input_path_list:
        with open(intput_path) as fin:
            header = fin.next()

            # it adds the header at the beginning and skips other headers
            if not header_written:
                fout.write(header)
                header_written = True

            # it adds all rows
            for line in fin:
                fout.write(line)

答案 1 :(得分:0)

明确需要问题中的更多细节(理想情况下输入和预期输出的示例)。

鉴于提供的信息很少,我将假设您知道所有文件都是有效的CSV,并且它们都具有相同的数字或行(行)。我还假设记忆不是一个问题(即它们是"小的"文件在内存中组合在一起)。此外,我假设行结尾是新行(\n)。

如果所有这些假设都有效,那么你可以这样做:

input_files = ['file1.csv', 'file2.csv', 'file3.csv']
output_file = 'output.csv'

output = None
for infile in input_files:
    with open(infile, 'r') as fh:
        if output:
            for i, l in enumerate(fh.readlines()):
                output[i] = "{},{}".format(output[i].rstrip('\n'), l)
        else:
            output = fh.readlines()

with open(output_file, 'w') as fh:
    for line in output:
        fh.write(line) 

可能有更有效的方法,但这是实现我认为你要求的快速而肮脏的方式。

前面的回答隐含地假设我们需要在python中执行此操作。如果bash是一个选项,那么您可以使用paste命令。例如:

paste -d, file1.csv file2.csv file3.csv > output.csv