我有一個CSV文件,我想將其轉換爲不同的格式。 CSV格式如下:將CSV表格轉換成自定義格式
A_to_B,B_to_C,C_to_D,...
0,2,1,...
即,每個標題由兩個變量組成,例如, A和B,並且文件中的每一行都包含值爲0,1或2.我試圖編寫一個Python腳本來讀取此CSV文件,並將其轉換爲如下格式:
A,B,0
B,C,2
C,D,1
...
換句話說,它將包含標題的第一行分成變量(例如,A,B,C,D等),然後匹配新格式的相應值。有沒有人有任何想法如何做到這一點?我有一些基礎知識,但實際的算法,我無法正確地得到我的頭。謝謝你的幫助。
更新#1
下面是一些代碼,我下來,但我沒有得到正確的輸出:
import csv,sys
reader = csv.reader(open(sys.argv[1], 'rt'), delimiter=',')
headers = reader.next()
data = []
for row in reader:
line = ','.join(row)
data.append(line)
for row in data:
for cols, val in zip(headers, row):
newRow = cols[0], cols[-1], val
print newRow
CSV文件看起來是這樣的:
A,B,C
0,2,1
0,1,1
但是,代碼的輸出如下所示,所以我需要一種方法以正確的方式遍歷CSV文件:
('A', 'A', '0')
('B', 'B', ',')
('C', 'C', '2')
('A', 'A', '0')
('B', 'B', ',')
('C', 'C', '1')
更新#2
如果有人絆倒這一點,這是我結束了與代碼(沒有錯誤處理或任何東西,但它的工作原理):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import csv,os,sys
reader = csv.reader(open(sys.argv[1], 'rt'), delimiter=',')
headers = reader.next()
i = 1
for row in reader:
os.system('rm id' + str(i) + '.csv')
os.system('cat ./seeds >> id' + str(i) + '.csv')
for srcdest,dist in zip(headers, row):
sd = srcdest.split('_to_')
src,dest = sd[0],sd[-1]
if dist == '0':
pass
else:
f = open('id' + str(i) + '.csv', 'a')
f.write('{},{},{}\n'.format(src.lower().replace('_',''),dest.lower().replace('_',''),float(dist)))
i=i+1
f.close()
謝謝爲了你的幫助大家!
你可以在你的帖子上編輯格式嗎?它看起來像你想要的東西在不同的線上,但是你的每個數據例子都只顯示爲一行。這使得很難理解你想要的輸出格式。 – BrenBarn
固定。謝謝你選擇了。 @BrenBarn – mstcamus