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

标签 python python-2.7 unicode jq python-unicode

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 打印包含以下内容的对象的方式:统一码对象。

>>> 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 - 为什么即使我使用了 str(),仍然打印 'u' 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45745684/

相关文章:

python - 如何解决AttributeError : module 'tensorflow._api.v2.distribute' has no attribute 'TPUStrategy'

ruby - 为什么 "lay' s"变成 "layaposs"?

Python Pandas : Find a pattern in a DataFrame

python - 使用 curve_fitting 的具有常数因子的幂律

linux - 如果里面只有一个文件,需要在 linux 中创建带有数据库行 ID 的目录吗?

python - PyQt4 名称在 eclipse 中显示为未定义,但运行良好

multithreading - 如何使用多进程或多线程客户端在 python 中获取工作进度条?

python - Unicode解码错误: 'ascii' codec can't decode byte 0xec in position

python - "SyntaxError: Non-ASCII character ..."或 "SyntaxError: Non-UTF-8 code starting with ..."尝试在 Python 脚本中使用非 ASCII 文本

python - 列出重叠查找器