我想把像[1,2,'a','He said "what do you mean?"']
这样的数据转换为CSV格式的字符串。
通常情况下,我们会使用csv.writer()
来实现这一点,因为它处理了所有疯狂的边缘情况(逗号转义、引号转义、CSV方言等)。
我目前的解决方案是这个有点古怪的函数:
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')
型
7条答案
按热度按时间4dc9hkyq1#
在Python 3中:
字符串
在Python 2中,需要对一些细节进行修改:
型
lhcgjxsq2#
您可以使用
StringIO
来代替您自己的Dummy_Writer
:这个模块实现了一个类似文件的类
StringIO
,它读取和写入字符串缓冲区(也称为内存文件)。还有
cStringIO
,它是StringIO
类的更快版本。“juud5qan3#
由于我经常使用这个方法将结果从sanic异步地以csv数据的形式返回给用户,所以我为Python 3编写了以下代码片段。
该代码段允许您反复重用同一个StringIo缓冲区。
字符串
例如:
型
在github gist查看更多用法:source and test
ezykj2lf4#
总而言之,我发现答案有点令人困惑。对于Python 2,这种用法对我来说很有效:
字符串
fv2wmkja5#
下面是适用于utf-8的版本。csvline 2string只适用于一行,结尾没有换行符,csv 2string适用于多行,有换行符:
字符串
mpbci0fu6#
我采纳了上面@user2099484的回答,对unicode做了一点小小的修改。
字符串
13z8s7eq7#
字符串