gpt4 book ai didi

python - 为什么 'u' 前缀仍在打印,即使我使用了 str()?

转载 作者:行者123 更新时间:2023-11-28 22:25:09 25 4
gpt4 key购买 nike

Python 新手,Python 版本:2.7.10,机器:Mac OS Sierra。

Susi Sushanti Don $ python -c "import sys, json; print(json.load(open('/tmp/2.json'))['pages'])"
{u'giga-10': [u'overview']}

Susi Sushanti Don $ python -c "import sys, json; print(str(json.load(open('/tmp/2.json'))['pages']))"
{u'giga-10': [u'overview']}

即使我使用了 str(),为什么 python 仍然打印 u 字符?我在其他帖子中读到使用字符串不会在标准输出中打印它。是否有任何类似的 str() 函数可以在任何 Python 数据对象上工作(而不是自己编写一个可重用的函数)?

我希望输出只是 {'giga-10': ['overview']}

最佳答案

它仍在打印 u 因为对象中的元素是 unicode 对象,这就是 python 打印包含的对象的方式Unicode 对象。

>>> x = {u'giga-10': [u'overview']}
>>> print x
{u'giga-10': [u'overview']}

您拥有 unicode 对象是有道理的,因为您正在反序列化 JSON,并且对应于 JSON 字符串的适当数据结构是 Python 2 unicode 对象。

请注意,如果您打印 unicode 对象,它不会打印 u,因为 u 实际上不是一部分unicode字符串的:

>>> print u"hello"
hello

这真的没关系。你应该让它停止打扰你。但是,如果你出于某种疯狂的原因坚持要摆脱那些 u,那么你必须将从 JSON 反序列化的任意对象中的任何 unicode 对象转换为 str 类型。这需要解码 unicode 对象。只要您不提供任何 Hook ,以下内容就应该适用于 json.load 的任何结果:

>>> def stringify(obj):
... if isinstance(obj, unicode):
... return obj.encode('utf8')
... elif isinstance(obj, list):
... return [stringify(x) for x in obj]
... elif isinstance(obj, dict):
... return {stringify(k):stringify(v) for k,v in obj.iteritems()}
... else:
... return obj
...
>>> print stringify(x)
{'giga-10': ['overview']}

但是没有充分的理由这样做,除非你真的、真的需要 Python 2 str,即“字节串”。您几乎可以肯定不会,或者至少没有说明您会这样做的任何理由。

关于python - 为什么 'u' 前缀仍在打印,即使我使用了 str()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45745684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com