使用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
会是怎样的自动方式做到这一点?
谢谢。
答
这可以通过使用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()
函数在单个调用中保存所有条目。
欢迎来到SO。不幸的是,这不是讨论论坛,教程服务或代码编写服务。请花时间阅读[问]及其中包含的链接。 – wwii
谢谢你的评论。但事实是,我问了一个问题来解决它,而这个问题并不是教程的回应。我不知道我的问题是否有可能的回应。所以很难知道这是否是讨论。无论如何,有些同事会自动帮助我。这个定义是把你的知识用于人 – Acicate