2013-08-16 163 views
1

如何將列表1或列表2中的每個列表打印爲不包含'[]'的列?將列表寫入csv行

import csv 
def test(): 
    list1 = [[1, 2, 3, 4], [3, 2, 5], [9, 3, 6, 8, 4]] 
    list2 = [[2, 2, 4, 4], [1, 9, 10], [2, 7, 7, 4, 5]] 
    with open('doc.csv', 'w', newline='') as file: 
     writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_ALL) 
     writer.writerow(list1) 
     writer.writerow(list2) 
if __name__ == '__main__': 
    test() 

這是接近我的願望,但在字符串中有[]:

[1, 2, 3, 4],[3, 2, 5],[9, 3, 6, 8, 4] 
[2, 2, 4, 4],[1, 9, 10],[2, 7, 7, 4, 5] 

編輯:

我想:

"1, 2, 3, 4","3, 2, 5","9, 3, 6, 8, 4" 
"2, 2, 4, 4","1, 9, 10","2, 7, 7, 4, 5" 
+0

你想幹什麼每個列表-IN-A柱的樣子? – martineau

+2

請顯示您實際想要的輸出,而不是僅僅向我們顯示錯誤的輸出,並讓我們猜測您可能想要什麼。 – abarnert

+0

看我的編輯..... – arynhard

回答

1

這是我會怎麼做它:

import csv 

def nested_list_formatter(nested): 
    return tuple(','.join(str(item) for item in sublist) for sublist in nested) 

def test(): 
    list1 = [[1, 2, 3, 4], [3, 2, 5], [9, 3, 6, 8, 4]] 
    list2 = [[2, 2, 4, 4], [1, 9, 10], [2, 7, 7, 4, 5]] 
    with open('doc.csv', 'w', newline='') as file: 
     writer = csv.writer(file, quotechar='"', quoting=csv.QUOTE_ALL) 
     writer.writerow(nested_list_formatter(list1)) 
     writer.writerow(nested_list_formatter(list2)) 

if __name__ == '__main__': 
    test() 

所得的doc.csv內容:

"1,2,3,4","3,2,5","9,3,6,8,4" 
"2,2,4,4","1,9,10","2,7,7,4,5" 
+0

確切的,謝謝! – arynhard

1

一列剛剛打印通過調用str就可以了。所以,如果你想做別的事情,你必須自己將每一列轉換爲一個字符串*(因爲在字符串上調用str只是返回字符串)。

就你而言,我們必須將外部列表的每個元素轉換爲我們想要的格式的字符串......這本身需要將每個內部列表的每個元素轉換爲字符串,以便我們可以以某種方式將它們連接起來。一般來說,在Python中,要對某個序列中的每個元素執行某些操作,可以調用map,或者編寫一個理解,所以我將分別執行其中的一個。

編輯完成後,它看起來像列中的逗號分隔列和逗號空間分隔值,但這沒關係,因爲您希望列自動引用。這很容易。

要與', '合併值,您只需撥打', '.join()即可。

def stringify_column_list(column_list): 
    return ', '.join(str(value) for value in column_list) 

怪異的分離和報價,你已經知道如何在writer處理。那麼剩下的唯一的事情就是呼籲每一列我們的格式化功能:

writer.writerow(map(stringify_column_list, list1)) 
writer.writerow(map(stringify_column_list, list2)) 

你甚至可能要考慮再次使用csv模塊來創建列的值。但這可能是過度的。


*或進入一個__str__方法你想要做什麼,但是這是很不值得做一些其他的對象。

+0

csv.QUOTE_ALL不會照顧逗號分隔符嗎? – arynhard

+0

@ user1991424:嗯,我沒有在你寫的''writer'中放太多的股票,因爲當你讓它默認的時候,你顯然不會讓列被4個空格分隔開(如你所想)逗號作爲分隔符。 – abarnert

+0

空格顯示列之間的區別。我會修復我的帖子 – arynhard