如何将列表加入字符串(caveat)?
时间:2020-03-06 14:34:25 来源:igfitidea点击:
沿着我之前的问题,我如何将字符串列表连接到字符串中,使值被清晰地引用。就像是:
['a', 'one "two" three', 'foo, bar', """both"'"""]
进入:
a, 'one "two" three', "foo, bar", "both\"'"
我怀疑csv模块将在这里发挥作用,但是我不确定如何获取所需的输出。
解决方案
使用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,"一个"""两个""三个"," foo,bar","两个""'"
csv
将会以一种可以稍后读取的方式编写。
我们可以通过定义"方言"来微调其输出,只需根据需要设置" quotechar"," escapechar"等:
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模块一起使用,以稍后将字符串读回到列表中。
这是一个稍微简单的选择。
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"\''
值得一提的是,Python的内置编码器还可以进行字符串转义:
>>> print "that's interesting".encode('string_escape') that\'s interesting