使用python从主csv文件创建许多csv文件

时间:2017-10-15 15:47:11

标签: python csv

我有一个包含数百行的csv文件,我想创建与列中的数据组一样多的csv文件。例如,我有以下csv:

title; data; value
morado; paste1; 002
morado; paste2; 004
rojo; paste1; 008
amarillo; paste1; 112
amarillo; paste2; 002
rojo ; paste2; 010

我的数据组将是#34;标题"列。所以最终的结果将是三个不同的csv文件(morado.csv,rojo.csv和amarillo.csv):

title; data; value
morado; paste1; 002
morado; paste2; 004

title; data; value
rojo; paste1; 00
rojo ; paste2; 010

title; data; value
amarillo; paste1; 112
amarillo; paste2; 002

自动方式是什么?

感谢。

1 个答案:

答案 0 :(得分:3)

可以使用defaultdict(list)来累积包含相同title的所有条目:

from collections import defaultdict
import csv

data = defaultdict(list)

with open('input.csv', 'rb') as f_input:
    csv_input = csv.reader(f_input, delimiter=';', skipinitialspace=True)
    header = next(csv_input)

    for row in csv_input:
        data[row[0].strip()].append(row)

for title, entries in data.items():
    with open("{}.csv".format(title), 'wb') as f_output:
        csv_output = csv.writer(f_output, delimiter=';')
        csv_output.writerow(header)
        csv_output.writerows(entries)

每行存储在defaultdict(list)中。这允许您使用title作为字典的键附加整行。在您的示例中,您有两组行rojo,因此在尝试开始将所有条目写入文件之前,必须存储所有条目。

标题存储并用于每个新创建的CSV文件。由于data包含行列表,writerows()函数可用于在一次调用中保存所有条目。