5

按照我上一个问题的思路,我如何将字符串列表加入到字符串中,以使值被干净地引用。就像是:

['a', 'one "two" three', 'foo, bar', """both"'"""]

进入:

a, 'one "two" three', "foo, bar", "both\"'"

我怀疑 csv 模块会在这里发挥作用,但我不确定如何获得我想要的输出。

4

3 回答 3

7

使用该csv模块,您可以这样做:

import csv
writer = csv.writer(open("some.csv", "wb"))
writer.writerow(the_list)

如果您需要一个字符串,只需将StringIO实例用作文件:

f = StringIO.StringIO()
writer = csv.writer(f)
writer.writerow(the_list)
print f.getvalue()

输出:a,"one ""two"" three","foo, bar","both""'"

csv将以稍后可以读回的方式写入。dialect您可以根据需要通过定义 a 、 set quotecharescapechar等来微调其输出:

class SomeDialect(csv.excel):
    delimiter = ','
    quotechar = '"'
    escapechar = "\\"
    doublequote = False
    lineterminator = '\n'
    quoting = csv.QUOTE_MINIMAL

f = cStringIO.StringIO()
writer = csv.writer(f, dialect=SomeDialect)
writer.writerow(the_list)
print f.getvalue()

输出:a,one \"two\" three,"foo, bar",both\"'

相同的方言可以与 csv 模块一起使用,以便稍后将字符串读回列表。

于 2008-09-23T00:43:42.593 回答
2

在相关的说明中,Python 的内置编码器也可以进行字符串转义:

>>> print "that's interesting".encode('string_escape')
that\'s interesting
于 2008-09-23T15:29:04.197 回答
1

这是一个稍微简单的替代方案。

def quote(s):
    if "'" in s or '"' in s or "," in str(s):
        return repr(s)
    return s

我们只需要引用一个可能有逗号或引号的值。

>>> x= ['a', 'one "two" three', 'foo, bar', 'both"\'']
>>> print ", ".join( map(quote,x) )
a, 'one "two" three', 'foo, bar', 'both"\''
于 2008-09-23T01:26:34.877 回答