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

问题描述:

我有一个包含数百行的csv文件,我希望创建与列中数据组一样多的csv文件。例如,我有以下csv:使用python从主csv文件创建许多csv文件

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

而我的数据组将成为“标题”列。所以,最终的结果将三型动物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

欢迎来到SO。不幸的是,这不是讨论论坛,教程服务或代码编写服务。请花时间阅读[问]及其中包含的链接。 – wwii

+0

谢谢你的评论。但事实是,我问了一个问题来解决它,而这个问题并不是教程的回应。我不知道我的问题是否有可能的回应。所以很难知道这是否是讨论。无论如何,有些同事会自动帮助我。这个定义是把你的知识用于人 – Acicate

这可以通过使用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()函数在单个调用中保存所有条目。