2016-03-15 76 views
1

我有一個列表,我需要寫入一個.csv是的,我做了很多東張西望(當然,我發現this link這是接近目標,但錯過了我的情況)你看writerows是有各種各樣的麻煩與分隔符/在.csv格式(在一個被從從等等等等分開)寫一個Python 3列表到.csv

我的名單看起來是這樣的:

buffer = [['a17', 'b17', 'c17', '8', 'e17', 'f17\n'], ['a24', 'b24', 'c24', '6', 'e24', 'f24\n'], ['a27', 'b27', 'c27', '9', 'e27', 'f27\n'], ['a18', 'b18', 'c18', '9', 'e18', 'f18\n'], ['a5', 'b5', 'c5', '5', 'e5', 'f5\n'], ['a20', 'b20', 'c20', '2', 'e20', 'f20\n'], ['a10', 'b10', 'c10', '1', 'e10', 'f10\n'], ['a3', 'b3', 'c3', '3', 'e3', 'f3\n'], ['a11', 'b11', 'c11', '2', 'e11', 'f11\n']]

我可以看到它像列表清單,所以我試過for eachRow in buffer:然後跟着eachRow.split(',')但沒有好處。 我只需要寫一個.csv它應該很容易......我錯過了什麼?

回答

2

您可以像這樣從緩衝區中刪除\ n字符串。您還必須將newline=''添加到Python 3中的with語句中。有關更多詳細信息,請參閱this answer

import csv 


buffer = [['a17', 'b17', 'c17', '8', 'e17', 'f17\n'], 
      ['a24', 'b24', 'c24', '6', 'e24', 'f24\n'], 
      ['a27', 'b27', 'c27', '9', 'e27', 'f27\n'], 
      ['a18', 'b18', 'c18', '9', 'e18', 'f18\n'], 
      ['a5', 'b5', 'c5', '5', 'e5', 'f5\n'], 
      ['a20', 'b20', 'c20', '2', 'e20', 'f20\n'], 
      ['a10', 'b10', 'c10', '1', 'e10', 'f10\n'], 
      ['a3', 'b3', 'c3', '3', 'e3', 'f3\n'], 
      ['a11', 'b11', 'c11', '2', 'e11', 'f11\n']] 

for row_index, list in enumerate(buffer): 
    for column_index, string in enumerate(list): 
     buffer[row_index][column_index] = buffer[row_index][column_index].replace('\n', '') 

with open('output.csv', 'w', newline='') as f: 
    writer = csv.writer(f) 
    writer.writerows(buffer) 
1
import csv 
with open('output.csv','w') as f: 
    writer = csv.writer(f) 
    writer.writerows(buffer) 

注意,在每個列表的最後一個條目有一個換行符,所以csvwriter被正確引用,這將看起來奇怪的格式,如果這樣你最終"f17\n"字符串(第一個列表爲例)你並不期待一條新線。

+0

我不敢相信我是如此親密。你很棒!這是一個很酷的開始,正如你所建議的換行符正在添加空白行。那麼,你認爲清除'\ n'換行符的最簡潔的方法是什麼? (當我閱讀源代碼.csv文件時,他們似乎在那裏) – user2206361

+0

我試過'lineAsList = [i.strip()for i]''''''''''''''''''''''''但是.csv仍然有第二行空白...任何想法? – user2206361

+0

我在回答中提到了你的問題。 – Igor