我有一个包含数百行的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
自动方式是什么?
感谢。
答案 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()
函数可用于在一次调用中保存所有条目。