2017-08-06 247 views
2

我試圖找到像我想要的一樣的問題,我沒弄明白。我嘗試學習列表的Python字典並將其轉換爲CSV文件。 Tha案就是這樣。我試圖爲一個鍵創建一個頭,我試圖創建一個數據作爲值。使用Python將列表字典轉換爲CSV文件

header_column = ["id", "data"] 
text = ["1, first", "2, second", "3, thrid"] 
for k in header_column: 
    a = {k:text} 
    insert = open('sample.csv', 'wb') 
    insert.write(str(a)) 

在CSV,我要像:

id data 
1 First 
2 Second 
3 Thrid 

回答

2

爲什麼你想使用字典?您可以使用csv模塊並直接編寫這些列表。

import csv 

header_column = ["id", "data"] 
text = ["1, first", "2, second", "3, third"] 

with open('sample.tsv', 'wb') as f: 
    writer = csv.writer(f, delimiter='\t') 
    writer.writerow(header_column) 
    for l in text: 
     writer.writerow(l.split(', ')) 

可正常工作,給

id data 
1 first 
2 second 
3 third 

待辦事項爲Excel明白,你的代碼是製表符分隔,您需要將其保存爲.tsv文件。

+0

你怎麼總是能夠如此快地得到答案?就像我開始打字一樣,你的打字將會完成:p –

+0

@JoeIddon哈哈對不起。我很擅長觸摸打字我猜:p –

+0

我嘗試了你的代碼,但是當我使用.csv文件時,結果並不是我想要的,但是當我用.tsv文件更改時,它正在工作/但是,爲什麼.tsv文件?它不能爲.csv文件工作? –

-1

導入numpy的只是pip -install numpy

import numpy 
a = numpy.asarray([ [1,first], [2,second], [3,third] ]) 
numpy.savetxt("sample.csv", a, delimiter=",") 
1

這是更有效的通過列表迭代,寫每一行一行接一行。這可以防止您的字典的創建,從列表的大小加倍內存需求。

我選擇不使用csv模塊,只是直接寫入文件,因爲您正在寫入文件的值已經被解析爲字符串(除了需要作爲字符串連接的頭文件) 。

header_column = ... 
text = ... 
with open('sample.csv', 'wb') as f: 
    f.write(", ".join(header_column) + '\n') 
    for row in text: 
     f.write(row + '\n') 
+0

嘿,這很好。但是,頭部數據沒有顯示,並且循環非常多,幾乎每個數據都有雙倍的數據。 –

+0

適用於我的樣本數據。 – Alexander

+0

哦,我的上帝,對不起,真正的文本變量是文本= [「1」,「第一」,「2」,「第二」,「3」,「第三」「]。這個符號(')是否有效? –

0

我是一個簡單的靈魂。沒有內在的需要使用先進的技術。

>>> header_column = ["id", "data"] 
>>> text = ["1, first", "2, second", "3, thrid"] 
>>> with open('sample.csv', 'w') as sample: 
...  n = sample.write(' '.join(header_column)+'\n') 
...  for item in text: 
...   n = sample.write(item.replace(',', '')+'\n') 

編輯:對評論的迴應有輕微改變的代碼。在第二個寫入語句中注意額外的.replace("'", '')

>>> with open('sample.csv', 'w') as sample: 
...  n = sample.write(' '.join(header_column)+'\n') 
...  for item in text: 
...   n = sample.write(item.replace(',', '').replace("'", '')+'\n') 
+0

我試過你的代碼,但結果不像我想要的,因爲結果是文本varibale它應該被分成兩列,id和數據。但全部文本變量只顯示在1列中。 –

+0

用問題中提供的數據爲我工作。 –

+0

噢,我的上帝,對不起,真正的文本變量是文本= [「1」,「第一」,「2」,「第二」,「3,'第三'」]。這個符號(')是否有效? –