Python str() - 指定要添加/使用哪种引号?

时间:2011-12-11 10:43:31

标签: python string

有没有办法影响python在将元组/列表转换为字符串时使用的引号类型?

对于某些NLP软件,我得到的元组有点像这样:

("It", ("isn't", "true"))

我想将其转换为字符串,只需删除所有双引号和逗号:

(It (Isn't true))

然而,python正在引用它的方式,似乎更喜欢单引号:

>>> print str(("It", ("Isn't" ,"true")))
('It', ("Isn't", 'true'))

,让我的生活变得更加艰难。当然我可以编写自己的函数来逐个打印出来,但是表示和本机python元组之间有很多相似之处。

3 个答案:

答案 0 :(得分:5)

您不能依赖repr使用的确切表示。我只是按照你的想法去编写自己的函数 - 我不认为它只是少数几行代码。这应该让你去。

def s_exp(x):
    if isinstance(x, (tuple, list)):
        return '(%s)' % (' '.join(map(s_exp, x)))
    return str(x)

编写自己的函数可能是不可避免的:如果你的字符串包含括号“(”,“)”或空格“”那么你需要某种形式的转义来生成结构良好的s表达式。

答案 1 :(得分:1)

也许你可以使用json代替

>>> import json
>>> print json.dumps(("It", ("isn't", "true")))
["It", ["isn't", "true"]]

答案 2 :(得分:0)

Python对象有一个__str__方法,可以将它们转换为字符串表示形式。这就是转换的内容,当字符串中使用另一种引用时,它足够智能地使用一种引用,如果两者都被使用,它也可以进行转义。

在您的示例中,It被单引号,因为这是Python“更喜欢”的内容。双引号用于Isn't,因为它包含`。

你应该真的推出自己的转换器。使用一点递归,它应该很小。