如何 return str 表示 python 中的非 Ascii 字母
How to return str representation of non- Ascii letters in python
我有一个代码片段可以将葡萄牙语文本与数字分开。代码是:
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__
,但是,我仍然不知道如何使用函数内部的 return 获得与 __str__
相同的输出。
你想多了。您使用 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
打印到屏幕时,使用 list
中包含的对象的 __repr__
。但是,如果您想要 __str__
,只需使用 print
:
In [7]: for piece in splits:
...: print(piece)
...:
Obras de revisão e recuperação
45453000-7)
注意,.encode
returns 一个字节串,即一个常规的非unicode
Python 2 str
。在它上面调用 str
本质上是身份函数,当你 encode
它时它已经是一个 str
:
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,它可以简化这一过程。 Python3中的str
对应Python2unicode
,Python2str
对应Python3bytes
对象。
所以,为了澄清事情,你的 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
我有一个代码片段可以将葡萄牙语文本与数字分开。代码是:
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__
,但是,我仍然不知道如何使用函数内部的 return 获得与 __str__
相同的输出。
你想多了。您使用 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
打印到屏幕时,使用 list
中包含的对象的 __repr__
。但是,如果您想要 __str__
,只需使用 print
:
In [7]: for piece in splits:
...: print(piece)
...:
Obras de revisão e recuperação
45453000-7)
注意,.encode
returns 一个字节串,即一个常规的非unicode
Python 2 str
。在它上面调用 str
本质上是身份函数,当你 encode
它时它已经是一个 str
:
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,它可以简化这一过程。 Python3中的str
对应Python2unicode
,Python2str
对应Python3bytes
对象。
所以,为了澄清事情,你的 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