![](/img/trans.png)
[英]Suppress the u'prefix indicating unicode' in python strings
[英]Suppress unicode prefix on strings when using pprint
使用 pprint 模块打印对象时,是否有任何干净的方法来抑制 unicode 字符前缀?
>>> import pprint
>>> pprint.pprint({u'foo': u'bar', u'baz': [u'apple', u'orange', u'pear', u'guava', u'banana'], u'hello': u'world'})
{u'baz': [u'apple', u'orange', u'pear', u'guava', u'banana'],
u'foo': u'bar',
u'hello': u'world'}
这看起来很丑。 有没有办法打印每个对象的 __str__ 值,而不是 __repr__?
可以通过覆盖 PrettyPrinter 对象的格式方法并将任何 unicode 对象转换为字符串来完成:
import pprint
def my_safe_repr(object, context, maxlevels, level):
typ = pprint._type(object)
if typ is unicode:
object = str(object)
return pprint._safe_repr(object, context, maxlevels, level)
printer = pprint.PrettyPrinter()
printer.format = my_safe_repr
printer.pprint({u'foo': u'bar', u'baz': [u'apple', u'orange', u'pear', u'guava', u'banana'], u'hello': u'world'})
这使:
{'baz': ['apple', 'orange', 'pear', 'guava', 'banana'],
'foo': 'bar',
'hello': 'world'}
这可能太多了,但一种可能的方法是在输出流上实现一个包装器:
import pprint,sys,re
class writer :
def write(self, text):
text=re.sub(r'u\'([^\']*)\'', r'\1',text)
sys.stdout.write(text)
wrt=writer()
d = { u'foo': u'bar', u'baz':
[u'apple', u'orange', u'pear', u'guava', u'banana'],
u'hello': u'world'}
pp = pprint.PrettyPrinter(stream=wrt)
pp.pprint(d)
输出:
{baz: [apple, orange, pear, guava, banana],
foo: bar,
hello: world}
也可以将引号放在双引号内以在字符串周围使用单引号,例如 'foo' : 'bar':
text=re.sub(r'u(\'[^\']*\')', r'\1',text)
这给出:
{'baz': ['apple', 'orange', 'pear', 'guava', 'banana'],
'foo': 'bar',
'hello': 'world'}
不, pprint打印表示。 它不是为了制作漂亮的最终用户输出,而是为了以可读的方式打印 Python 对象。
pprint 模块提供了一种以可用作解释器输入的形式“漂亮地打印”任意 Python 数据结构的功能。
(多年后回答)
只需使用python3。 默认情况下,所有标准字符串都是 unicode,因此没有 u 前缀。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.