2016-12-20 62 views
0

我有一个约10个CSV文件的数据集。我想将这些文件逐行组合成一个CSV文件。如何使用python逐行连接多个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() 
+0

您的CSV文件是否具有相同的列名和订单? – Fomalhaut

+0

这个答案如何:http://stackoverflow.com/questions/2512386/how-to-merge-200-csv-files-in-python –

+0

发布一些csv数据将有所帮助 –

回答

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

可能有更有效的方式,但是这是一个快速和肮脏的方式来实现我觉得你要求。


以前的答案隐含地假设,我们需要做到这一点的蟒蛇。如果bash是一个选项,那么你可以使用paste命令。例如:

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