如何将数据作为字符串(而不是文件)写入CSV格式?

2024-09-29 01:31:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把[1,2,'a','He said "what do you mean?"']这样的数据转换成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')

Tags: csv字符串selfdatadef情况解决方案边缘
3条回答

你可以用^{}代替你自己的Dummy_Writer

This module implements a file-like class, StringIO, that reads and writes a string buffer (also known as memory files).

还有^{},这是StringIO类的一个更快版本。

我发现答案,总之,有点混乱。对于Python 2,这种用法对我有效:

import csv, io

def csv2string(data):
    si = io.BytesIO()
    cw = csv.writer(si)
    cw.writerow(data)
    return si.getvalue().strip('\r\n')

data=[1,2,'a','He said "what do you mean?"']
print csv2string(data)

在Python 3中:

>>> import io
>>> import csv
>>> output = io.StringIO()
>>> csvdata = [1,2,'a','He said "what do you mean?"',"Whoa!\nNewlines!"]
>>> writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC)
>>> writer.writerow(csvdata)
59
>>> output.getvalue()
'1,2,"a","He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'

对于Python2,一些细节需要稍加更改:

>>> output = io.BytesIO()
>>> writer = csv.writer(output)
>>> writer.writerow(csvdata)
57L
>>> output.getvalue()
'1,2,a,"He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'

相关问题 更多 >