2017-10-15 185 views
-2

我有一個包含數百行的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

回答

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()函數在單個調用中保存所有條目。