2014-09-29 73 views
1

使用CSV編寫器,我試圖寫一個字符串列表文件。For循環中的整個字符串,而不僅僅是字符

每個字符串應該佔據一個單獨的行。

sectionlist = ["cat", "dog", "frog"] 

當我執行下面的代碼:

with open('pdftable.csv', 'wt') as csvfile: 
     writer = csv.writer(csvfile, delimiter=',') 
     for i in sectionlist: 
      writer.writerow(i) 

創建

c,a,t 
d,o,g 
f,r,o,g 

時,我想

cat 
dog 
frog 

爲什麼for迴路分別分析每一個字符和H我可以將整個字符串一起傳遞到csv.writer,這樣每個字符都可以寫出來嗎?

+1

打電話給你的清單「list」是個壞主意 – khelwood 2014-09-29 16:58:35

+0

與'sectionlist'相關的'list'(不要用你自己的變量的名字)是怎麼回事? – jonrsharpe 2014-09-29 16:58:57

+0

實際文件是一個人口統計數據的列表,它適合於csv寫作,因爲我希望能夠在excel中對其進行編輯。如果將其作爲文本文件編寫更容易並完成相同的任務,請告訴我!謝謝 – foursuits 2014-09-29 16:59:04

回答

0

我認爲你需要的是:

with open('pdftable.csv', 'wt') as csvfile: 
    writer = csv.writer(csvfile, delimiter=',') 
    for i in sectionlist: 
     writer.writerow([i]) # note the square brackets here 

writerow對待其視爲可迭代的說法,所以如果你傳遞一個字符串,它會看到每個字符都是該行中的一個元素;然而,你希望整個字符串是一個項目,所以你必須把它放在一個列表或元組中。正如其他答案所建議的那樣,如果您的特殊情況不比您發佈的內容更復雜,那麼根本就不需要csv.writer

+0

謝謝!這是對我的代碼進行的最簡單的編輯!你教了我一些有價值的東西:) – foursuits 2014-09-29 17:05:35

1

它看起來不像你甚至需要使用CSV作家。

l = ["cat", "dog", "frog"]  # Don't name your variable list! 
with open('pdftable.csv', 'w') as csvfile: 
    for word in l: 
     csvfile.write(word + '\n') 

或者像@ GP89建議

with open('pdftable.csv', 'w') as csvfile: 
    csvfile.writelines(l) 
0

的問題是i表示(字),不是列表(行)。字符串在Python中也是可迭代的序列(字符),因此即使結果「奇怪」,CSV函數也可以毫無錯誤地接受對象。

修復sectionlist使得它是一個字符串(行)的列表的列表所以i將字符串的列表,包裝每個字在列表作爲writerow參數一起使用時,或簡單地不要使用writerow,其中預計字符串列表

中平凡,以下結構將正確保存:

sectionlist = [ 
    ["cat", "meow"], 
    ["dog"], 
    ["frog", "hop", "pond"] 
] 
相關問題