我有一个代码段,可以将葡萄牙语文本与数字分开。代码是:
import re
def name():
text = u'Obras de revisão e recuperação (45453000-7)'
splits = text.split(u" (")
return(str(splits[0].encode("utf8")))
name()
,输出为:'Obras de revis\xc3\xa3o e recupera\xc3\xa7\xc3\xa3o'
但是当我写
时print(splits[0].encode("utf8"))
输出结果为:Obras de revisão e recuperação
这是我想要的结果。
但它不适用于return函数。我读了difference between __str__
and __repr__
,但是,我仍然无法在函数内部返回与__str__
相同的输出。
答案 0 :(得分:1)
你正在思考这个问题。您使用unicode
字面值来制作unicode
对象,然后您的splits
列表将包含unicode
个对象:
In [4]: def name():
...: text = u'Obras de revisão e recuperação (45453000-7)'
...: splits = text.split(u" (")
...: return splits
...:
In [5]: splits = name()
In [6]: splits
Out[6]: [u'Obras de revis\xe3o e recupera\xe7\xe3o', u'45453000-7)']
当在屏幕上打印list
时,会使用__repr__
中包含的list
个对象。但是,如果您需要__str__
,只需使用print
:
In [7]: for piece in splits:
...: print(piece)
...:
Obras de revisão e recuperação
45453000-7)
注意,.encode
会返回一个字节字符串,即常规的非unicode
Python 2 str
。在其上调用str
本质上是身份功能,当您str
时它已经是encode
:
In [8]: splits[0].encode('utf8')
Out[8]: 'Obras de revis\xc3\xa3o e recupera\xc3\xa7\xc3\xa3o'
In [9]: str(splits[0].encode('utf8'))
Out[9]: 'Obras de revis\xc3\xa3o e recupera\xc3\xa7\xc3\xa3o'
你应该真的,真的考虑使用Python 3,它简化了这一点。 Python 3中的str
对应于Python 2 unicode
,而Python 2 str
对应于Python 3 bytes
对象。
因此,为了澄清事情,您的name
函数应该像这样工作:
In [16]: def name():
...: text = u'Obras de revisão e recuperação (45453000-7)'
...: splits = text.split(u" (")
...: return splits[0]
...:
In [17]: print(name())
Obras de revisão e recuperação