如何将列表加入字符串(警告)?
Posted
技术标签:
【中文标题】如何将列表加入字符串(警告)?【英文标题】:How can I join a list into a string (caveat)? 【发布时间】:2010-09-12 05:15:44 【问题描述】:按照我之前的question 的思路,我如何将字符串列表加入到字符串中,以便清楚地引用值。比如:
['a', 'one "two" three', 'foo, bar', """both"'"""]
进入:
a, 'one "two" three', "foo, bar", "both\"'"
我怀疑 csv 模块会在这里发挥作用,但我不确定如何获得我想要的输出。
【问题讨论】:
【参考方案1】:使用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
来微调其输出,只需根据需要设置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 模块一起使用,稍后将字符串读回列表。
【讨论】:
【参考方案2】:这里有一个稍微简单的替代方案。
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"\''
【讨论】:
【参考方案3】:在相关说明中,Python 的 builtin encoders 也可以进行字符串转义:
>>> print "that's interesting".encode('string_escape')
that\'s interesting
【讨论】:
+1 虽然这本身并不是我想要的,但我可以看到这在某些时候对我很有帮助。以上是关于如何将列表加入字符串(警告)?的主要内容,如果未能解决你的问题,请参考以下文章