2013-05-09 76 views
0

每個機構。我有一些如下數據:用python編寫特殊格式的csv文件

data = [''234','123','145','134','156'],['12','67895','12345' ,'1234']]

我想以「aid,pid」是列標題的方式將這些數據寫入csv文件。每個子列表的第一個元素是「aid」列,其餘的都是「pid」。現在我想用像下面這樣的製表符來編寫pid。

aid,pid 

234,123 145 134 156 

12,67895 12345 1234 

這裏是我的示例代碼

import csv 

data =[ ['234','123','145','134','156'],['12','67895','12345','1234'] ] 
valid_result = open('./result/valid_result.csv','wb') 
writer = csv.writer(valid_result,delimiter = ',',dialect = 'excel-tab') 
header = ['aid','pid'] 
writer.writerow(header) 

for record in data: 
    writer.writerow(record) 

是否有蟒蛇任何解決方案?

+0

是的,有解決方案,你有嘗試過什麼嗎?關於用python編寫csv有幾個相關的問題。或者,您的問題是將列表分成兩列? – pcalcao 2013-05-09 10:48:35

+0

谷歌,試試你的自我。如果這不起作用,請在此處提供示例代碼,並告訴我們您遇到了什麼錯誤。 – 2013-05-09 10:54:35

+0

我自己找到了解決方案。實際上,csv文件會忽略標記字符並將其替換爲空字符。例如,如果我有data = ['123','23214'+'\ t'+'3244'],則將真實數據輸入到在執行代碼csv.writerow(data)之後,csv文件是123,232143244。你如何看待這種情況呢?或者我的想法可能是錯誤的。 – user1298367 2013-05-09 12:22:55

回答

1

如果我理解正確的話,你需要拆分各列表分成兩列:

for record in data: 
    new_rec = [record[0], " ".join(record[1:])] 

這樣的事情應該做,並寫入new_rec而不是記錄。

+0

謝謝,它運作良好! – user1298367 2013-05-09 11:46:28

0

這個替換您的for循環:

for record in data: 
    writer.writerow([record[0],'\t'.join(record[1:])]) 

您也將通過valid_result.close()接近文件aftwewards。

下利用了withopen打開和關閉爲您的文件:

import csv 
data =[ ['234','123','145','134','156'],['12','67895','12345','1234'] ] 
with open('valid_result.csv','wb') as valid_result: 
    writer = csv.writer(valid_result,delimiter = ',',dialect = 'excel-tab') 
    header = ['aid','pid'] 
    writer.writerow(header) 
    for record in data: 
     writer.writerow([record[0],'\t'.join(record[1:])]) 

都產生:

aid,pid 
234,123 145 134 156 
12,67895 12345 1234 
+0

這應該是''\ t'.join(記錄[1:])' – 2013-05-09 10:57:18

+0

@BurhanKhalid謝謝,更新它。 – HennyH 2013-05-09 10:58:17

+0

@HennyH謝謝,它運作良好! – user1298367 2013-05-09 11:46:05