2015-09-11 65 views
0

我在蟒蛇新我試圖進行排序,並通過西3的值創建CSV文件這行標題創建的CSV值的Python

的CSV因爲這以下結構:

Name;Family;ID 
Paul;Smith;5 
Kery;Gou;6 
Jimmy;Ja;2 
Jony;Luo;5 
Jack;Elve;2 

我想要得到的結果是3個不同的文件(在這種情況下)排序的ID

所以文件中的一個Id5.csv應該像

Paul Smith 5 
Jony Luo 5 

文件Id6.csv應該像

Kery Gou 6 

而且Id2.csv應該像

Jimmy Ja  2 
Jack Elve 2 

希望我是清楚的,任何幫助,將可以很容易地取得了使用體會

+1

你目前的數據結構,你沒有說明,是這個'pandas'如果是這樣的狀態並添加標籤 – EdChum

回答

0

如何:

with open('your.csv') as f: 
    lines = [line.split(';') for line in f.read().splitlines()[1:]] 

lines_grouped = [[l for l in lines if l[2]==x] for x in {l[2] for l in lines}] 
for group in lines_grouped: 
    with open('Id' + group[0][2] + '.csv', 'w+') as f: 
     f.write('\n'.join([','.join(line) for line in group])) 
+0

完美的工作!非常感謝你 – Polin

2

pandas庫:

In [141]: 
import pandas as pd 
import io 
# 
t="""Name;Family;ID 
Paul;Smith;5 
Kery;Gou;6 
Jimmy;Ja;2 
Jony;Luo;5 
Jack;Elve;2""" 
#load the csv 
df = pd.read_csv(io.StringIO(t), sep=';') 
# now get unique IDs, construct a filename and write out 
for ID in df['ID'].unique(): 
    print('ID' + str(ID)) 
    #df[df['ID']==ID].to_csv('ID' + str(ID) + '.csv') 
ID5 
ID6 
ID2 

可以忽略io位以上的情況下,它也只是:

df = pd.read_csv(file_path, sep=';') 

所以你只是取消註釋行:

df[df['ID']==ID].to_csv('ID' + str(ID) + '.csv') 

您可以選擇通過PARAMS index=Falsesep='\t'如果你不」不想一個索引列,你更喜歡製表符分隔,看到docs

+0

感謝EdChum,有沒有辦法使用列表作爲輸入創建在一個單獨的文件? – Polin

+0

你可以編輯你的列表看起來像你的問題,謝謝 – EdChum