如何将列表加入字符串(警告)?

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 来微调其输出,只需根据需要设置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 模块一起使用,稍后将字符串读回列表。

【讨论】:

【参考方案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 虽然这本身并不是我想要的,但我可以看到这在某些时候对我很有帮助。

以上是关于如何将列表加入字符串(警告)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将每个子列表加入 Python 中的单个字符串?

在 Python 中将具有不同类型的项目列表作为字符串加入

将对象属性列表加入字符串

我如何加入 ID 号与列表字符串 ID [重复]

如何在不丢失子列表的情况下加入嵌套列表的内容?

如何阻止警告对话框停止执行控制它的 Python 程序?