2011-09-27 91 views
0

我在python中使用csv模塊,轉義字符不斷搞亂我的csv。舉例來說,如果我有以下幾點:在python中將轉義字符寫入Csv文件

import csv 

rowWriter = csv.writer(open('bike.csv', 'w'), delimiter = ",") 

text1 = "I like to \n ride my bike" 
text2 = "pumpkin sauce" 

rowWriter.writerow([text1, text2]) 
rowWriter.writerow(['chicken','wings']) 

,我想我的CSV樣子:

I like to \n ride my bike,pumpkin sauce 
chicken,wings 

但不是原來的

I like to 
ride my bike,pumpkin sauce 
chicken,wings 

我試過組合引用,雙引號,escapechar和csv模塊的其他參數,但我似乎無法使其工作。有誰知道這是怎麼回事?

*注 - 我還使用的編解碼器編碼(「UTF-8」),這樣的text1真的看起來像"I like to \n ride my bike".encode("utf-8")

回答

3

的問題是不與他們寫入文件。問題是\n是在''""內部的換行符。您真正想要的是'I like to \\n ride my bike'r'I like to \n ride my bike'(請注意r前綴)。

+0

這就是最新的。感謝那。我仍然試圖找出轉換爲字符串文字的最佳方法。我發現效果最好的是'text =「%r」%「我喜歡\ n騎自行車」.encode(「utf-8」)'然後使用'text [1:-1]'。 – crunkchitis

+0

@crunkchitis你爲什麼需要調用'.encode()'?看起來你使用的字符串來自你的源代碼。 – patrys

+0

是的,我想你是對的。我不需要再調用編碼了,現在我正在使用原始字符串。我使用的文本中有很多unicode字符,所以在我開始使用原始字符串之前,我正在使用encode,以便csv可以讀取unicode文本。 – crunkchitis

0

首先,爲什麼要r"\n"(兩個字節)出現在文件中而不是"\n"(一個字節)並不明顯。輸出文件的用戶意味着什麼?在每個輸入字段上使用ast.evaluate_literal()?如果您的實際數據包含任何(非ASCII字符,撇號,引號),那麼我會非常謹慎地使用repr()對其進行序列化。其次,您錯誤地報告了您的代碼或您的輸出(或兩者)。您展示這些代碼實際上產生:

"I like to 
ride my bike",pumpkin sauce 
chicken,wings 

第三,關於你的"I like to \n ride my bike".encode("utf-8")str_object.encode("utf-8")是,如果str_object只包含ASCII字節絕對沒有意義的 - 它什麼都不做。否則會引發異常。

第四,此評論:

我不需要再打電話編碼,現在我使用的原料 字符串。有在我用,所以我纔開始使用我是用編碼所以 原始字符串,CSV可以讀取Unicode文本

沒有任何意義是 文字很多的Unicode字符 - - 正如我所說的,"ascii string".encode('utf8')是毫無意義的。

考慮向後退兩步,並解釋你真正想要做什麼:你的數據來自哪裏,內容是什麼,最重要的是,讀取文件的過程是什麼做?

+0

謝謝,我會做一些修改。 – crunkchitis