我想將類似[1,2,'a','He said "what do you mean?"']
的數據轉換爲csv格式的字符串。如何將數據寫入csv格式爲字符串(不是文件)?
通常人們會用csv.writer()
對於這一點,因爲它處理了所有的瘋狂邊緣的情況下(逗號逃脫,引號逃逸,CSV方言等),美中不足的是,csv.writer()
預計將輸出到文件的對象,而不是一個串。
我目前的解決辦法是這個有點哈克功能:
def CSV_String_Writeline(data):
class Dummy_Writer:
def write(self,instring):
self.outstring = instring.strip("\r\n")
dw = Dummy_Writer()
csv_w = csv.writer(dw)
csv_w.writerow(data)
return dw.outstring
誰能給一個更優雅的解決方案,還是處理邊界情況呢?
編輯:這就是我最後做它:
def csv2string(data):
si = StringIO.StringIO()
cw = csv.writer(si)
cw.writerow(data)
return si.getvalue().strip('\r\n')
很好的例子。 :) 作爲旁註,當在CSV文件中遇到換行符時,通常的行爲是什麼? \ n \ n可以確定在數據中間,但是\ r \ n'表示記錄結束,無論它出現在哪裏? (假設你在使用'\ r \ n'作爲行結束符的平臺上)。 – 2012-02-06 08:35:53
我不確定。我本該期待'\ r \ n',因爲'io.StringIO()'的默認參數是'newline = None',它啓用了通用換行符模式,該模式應該根據您的平臺自動使用正確的換行符樣式。我自己對這種行爲感到困惑。 – 2012-02-06 08:46:33
@ Li-aungYip:我打開了一個[關於這個問題](http://stackoverflow.com/questions/9157623/unexpected-behavior-of-universal-newline-mode-with-stringio-and-csv-modules )。 – 2012-02-06 08:55:33