2012-11-27 179 views
1

我有一段代碼將一堆行寫入csv文件。它寫道:我想要什麼,但是......它插入括號中的每一列... 的代碼是:Python csv寫入列表

root_text_csv = "C:/Users/s/Desktop/text/knife"+numarul_folderelor+".csv" 
    fisier_text_knife = csv.writer(open(root_text_csv,'wb')) 
    row_test = [] 
    for filenames in os.listdir(foldere_prrra): 
     knife = filenames.replace("<SP>", " ").replace(".sys", "") 
     test = ['cut '+knife+' off for fuged,', 'cut '+knife+' off,', 'cut '+knife+' fool alabala,', 'cut '+knife+' nieh,', 'prrra '+knife+' alabala,', 
       'cut '+knife+' fuged streaming,', 'cut '+knife+' alabala fuged,', 'cut '+knife+' off alabala,', 'prrra '+knife+' fool alabala,', 
       'cut '+knife+' off fuged,', 'prrra '+knife+' niether alabala,', 'cut off '+knife+' for fuged,' 'cut '+knife+' fuged fool alabala,', 
       'cut '+knife+' off niether,', 'where to cut '+knife+',', ''+knife+' fool alabala off,', 'steel '+knife+' off fuged,', 'cut '+knife+' fuged niether,', 
       ''+knife+' fool alabala off,', 'fuged streaming '+knife+',', 'cut '+knife+' niether,', 'cut '+knife+' fuged,', 'red '+knife+' off,', ''+knife+' off,', 
       'red '+knife+',', 'cut '+knife+',', ''+knife+' fuged,', 'fuged '+knife+',', ''+knife+' off,', 'off '+knife+',', ''+knife+','] 
     random.shuffle(test) 
     scris = [x for x in test if len(x) <= 30] 
     row_test.append(scris) #row_test.append(scris[0]) 
    fisier_text_knife.writerow(row_test) 

如果我row_test.append(scris[0])更換row_test.append(scris[0:7])它只寫串了他們所有的(但它寫入沒有括號 - > [] < - )。

我想寫7或8行。我在這段代碼上浪費了我的大腦。

謝謝你的時間。

回答

1

發生這種情況的原因是因爲是一個列表。而不是

row_test.append(scris[0:7]) 

做到這一點,而:

row_test += scris[0:7] 

這工作太(見下面的評論):

row_test.extend(scris[0:7]) 

如果仍然沒有意義開啓一個控制檯並鍵入下面的示例東西。每當你改變l打印出來。

下面的例子應該告訴你爲什麼這樣工作的:

l = [1,2,3]   # l = [1,2,3] 
l.extend([4,5])  #now l = [1,2,3,4,5] 
l.append([6,7])  #now l = [1,2,3,4,5,[6,7]] 
l.extend('hi there') #raises an exception 

當你調用some_list.append(some_item)它把some_itemsome_list。所以如果some_item也是一個列表,那麼你會得到一個列表裏面的的列表。

當你調用some_list.extend(some_item)加入some_itemsome_list結束。所以如果some_item不是一個列表,那麼這將會出錯。

編輯我想我看到你現在想要什麼......

所以給你想要的CSV樣子像[['1','2','3'],['4','5','6'],['7','8','9']]列表:123,456,789,對不對?

相反的:

fisier_text_knife.writerow(row_test) 

嘗試了這一點:

csv_friendly = [''.join(l) for l in row_test] 
fisier_text_knife.writerow(csv_friendly) 
+3

'.extend()'會比'+ ='用片更好。 – geoffspear

+0

'row_test + = scris [0:7]'而不是for循環之前的'row_test = []'?我不能那樣做......''row_test = []'是爲了寫作colomns。 –

1

將被寫入到文件中的字符串是一樣的,當你打印(row_test)作爲 - 的列表名單。

您可以使用加入爲創造每行一個大的字符串,是這樣的:

row_test+= ','.join(scris) + '\n' 
+0

:(我不明白... –

+0

確切地說,它的列表清單......我怎麼能寫出沒有那個該死的括號列表的列表? –