2017-07-20 125 views
0

我有一堆CSV文件,我将把它们合并到一个名为'Combined'的CSV文件中。对于每个CSV文件,一旦将数据附加到“组合”文件,我想在“组合”的第1列之前插入一个新列,并在该迭代中插入从中复制数据的CSV文件的名称。有什么办法可以在Python中做到这一点?将列添加到CSV文件并在该列中插入文件名

+0

你所追加的csv文件的格式是什么?你在追加更多专栏吗?或者只是将新数据附加到现有列上? – userXktape

+0

是csv文件的格式与其他格式相同吗? – MattR

+0

@userXktape:CSV文件的格式是.LOG。我不追加更多的专栏。我只想在第一列中插入文件名,并在现有数据正下方的文件中追加任何内容。 –

回答

0

这可以按如下方式完成。首先打开一个CSV文件输出。现在使用Python的glob库来列出文件夹中的所有CSV文件。对于在CSV文件中的每一行,前缀的文件名作为第一列条目,然后将其写入output.csv

import glob 
import csv 

with open('output.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output) 

    for filename in glob.glob('*.csv'): 
     with open(filename, newline='') as f_input: 
      csv_input = csv.reader(f_input) 

      for row in csv_input: 
       row.insert(0, filename) 
       csv_output.writerow(row) 

因此,举例来说,如果你有这两个CSV文件中:

num.csv

1,2,3,4,5 
1,2,3,4,5 
1,2,3,4,5 

letter.csv

a,b,c,d,e,f 
a,b,c,d,e,f 
a,b,c,d,e,f 
a,b,c,d,e,f 

这将创建下列output.csv文件:

letter.csv,a,b,c,d,e,f 
letter.csv,a,b,c,d,e,f 
letter.csv,a,b,c,d,e,f 
letter.csv,a,b,c,d,e,f 
num.csv,1,2,3,4,5 
num.csv,1,2,3,4,5 
num.csv,1,2,3,4,5 

这里假定您使用的是Python 3.x.

+0

令人惊叹的马丁埃文斯。万分感谢。对于python来说,这是一个新的东西,并且很难搞清楚这一点。对我的问题的一个小改变:这些必须合并的'csv文件'实际上是压缩文件夹中的.LOG文件。我知道如何解压缩它们和所有这些,但我仍然得到一个错误,如下所示: 迭代器应该返回字符串,而不是字节(你是否在文本模式下打开文件?) PS:我正在使用Python 3.x 。 –

+0

在Python 3.x中,您需要稍微不同地打开这些文件。我已经相应地更新了脚本。假设您的日志文件格式相同,则更改为使用'* .log' –

+0

代码抛出此错误:在二进制模式下不支持参数'newline'。我相信这是由于'r'默认为'rb'这个事实造成的。所以,我只是将'r'改为'rt',它完美地工作。万分感谢! –

相关问题