跳转到主要内容

pprint的替代品,实际上很漂亮

项目描述

https://travis-ci.org/wolever/pprintpp.svg?branch=master

现在支持Python 3!

安装

pprint++ 可以使用Python 2或Python 3通过 pipeasy_install 安装

$ pip install pprintpp
- OR -
$ easy_install pprintpp

使用方法

pprint++ 可以通过以下三种方式使用

  1. 通过独立的 pp

    $ pip install pp-ez
    $ python
    ...
    >>> import pp
    >>> pp(["Hello", "world"])
    ["Hello", "world"]

    更多内容,请参阅 https://pypi.python.org/pypi/pp-ez

  2. 作为一个命令行程序,它将从标准输入读取Python字面量并将其格式化打印

    $ echo "{'hello': 'world'}" | pypprint
    {'hello': 'world'}
  3. 作为一个 ipython 扩展

    In [1]: %load_ext pprintpp

    这将使用pprintpp为ipython的输出。

    要加载此扩展以在ipython启动时运行,请将上一行放入您的 启动文件 中。

    您可以通过以下方式更改缩进级别

    In [2]: %config PPrintPP.indentation = 4
  4. 要模拟pprint

    >>> import pprintpp
    >>> pprintpp.monkeypatch()
    >>> import pprint
    >>> pprint.pprint(...)

    注意:原始的 pprint 模块可以通过 import pprint_original 使用。另外,如果已经导入了 pprint,则会发出警告。可以通过传递 quiet=True 来抑制此警告。

  5. 并且,如果您真的想的话,甚至可以将其作为常规模块导入

    >>> import pprintpp
    >>> pprintpp.pprint(...)
    

实用性提示

pp

为了获得额外的代码美观性,可以将 pprintpp.pprint 导入为 pp

>>> from pprintpp import pprint as pp
>>> pp(...)

如果字母实在太多,可以从 PyPI 安装 pp-ez 包,确保美观打印永远不会超过一个 import pp 的距离。

$ pip install pp-ez
$ python
...
>>> import pp
>>> pp(["Hello", "world"])
["Hello", "world"]

更多内容,请参阅 https://pypi.python.org/pypi/pp-ez

为什么更美观?

pprint 不同,pprint++ 努力输出可读性强的、基本上符合 PEP8 规范的输入表示。

它还明确支持:collections 模块(defaultdictCounter)和 numpy 数组。

>>> import numpy as np
>>> from collections import defaultdict, Counter
>>> pprint([np.array([[1,2],[3,4]]), defaultdict(int, {"foo": 1}), Counter("aaabbc")])
[
    array([[1, 2],
           [3, 4]]),
    defaultdict(<type 'int'>, {'foo': 1}),
    Counter({'a': 3, 'b': 2, 'c': 1}),
]

如果可能,Unicode 字符将不会被转义打印。这通过检查输出流的编码(默认为 utf-8)和字符的 Unicode 类别来完成。努力打印仅视觉上无歧义的字符:字母和数字将被无转义打印,空格、组合字符和控制字符将被转义。

>>> unistr = u"\xe9e\u0301"
>>> print unistr
éé
>>> pprint(unistr)
u'ée\u0301'

还会考虑输出流的编码。

>>> import io
>>> stream = io.BytesIO()
>>> stream.encoding = "ascii"
>>> pprint(unistr, stream=stream)
>>> print stream.getvalue()
u'\xe9e\u0301'

未定义新 __repr__ 的内置收集类型子类将在它们的 repr 中明确添加类名。例如

>>> class MyList(list):
...     pass
...
>>> pprint(MyList())
MyList()
>>> pprint(MyList([1, 2, 3]))
MyList([1, 2, 3])

请注意,正如您所期望的,自定义 __repr__ 方法将被尊重。

>>> class MyList(list):
...     def __repr__(self):
...         return "custom repr!"
...
>>> pprint(MyList())
custom repr!

注意pprint++ 仍在开发中,因此格式 将会 随时间变化和改进。

示例

使用 printpp

>>> import pprintpp
>>> pprintpp.pprint(["Hello", np.array([[1,2],[3,4]])])
[
    'Hello',
    array([[1, 2],
           [3, 4]]),
]
>>> pprintpp.pprint(tweet)
{
    'coordinates': None,
    'created_at': 'Mon Jun 27 19:32:19 +0000 2011',
    'entities': {
        'hashtags': [],
        'urls': [
            {
                'display_url': 'tumblr.com/xnr37hf0yz',
                'expanded_url': 'http://tumblr.com/xnr37hf0yz',
                'indices': [107, 126],
                'url': 'https://#/cCIWIwg',
            },
        ],
        'user_mentions': [],
    },
    'place': None,
    'source': '<a href="http://www.tumblr.com/" rel="nofollow">Tumblr</a>',
    'truncated': False,
    'user': {
        'contributors_enabled': True,
        'default_profile': False,
        'entities': {'hashtags': [], 'urls': [], 'user_mentions': []},
        'favourites_count': 20,
        'id_str': '6253282',
        'profile_link_color': '0094C2',
    },
}

不使用 printpp

>>> import pprint
>>> import numpy as np
>>> pprint.pprint(["Hello", np.array([[1,2],[3,4]])])
['Hello', array([[1, 2],
       [3, 4]])]
>>> tweet = {'coordinates': None, 'created_at': 'Mon Jun 27 19:32:19 +0000 2011', 'entities': {'hashtags': [], 'urls': [{'display_url': 'tumblr.com/xnr37hf0yz', 'expanded_url': 'http://tumblr.com/xnr37hf0yz', 'indices': [107, 126], 'url': 'https://#/cCIWIwg'}], 'user_mentions': []}, 'place': None, 'source': '<a href="http://www.tumblr.com/" rel="nofollow">Tumblr</a>', 'truncated': False, 'user': {'contributors_enabled': True, 'default_profile': False, 'entities': {'hashtags': [], 'urls': [], 'user_mentions': []}, 'favourites_count': 20, 'id_str': '6253282', 'profile_link_color': '0094C2'}}
>>> pprint.pprint(tweet)
{'coordinates': None,
 'created_at': 'Mon Jun 27 19:32:19 +0000 2011',
 'entities': {'hashtags': [],
              'urls': [{'display_url': 'tumblr.com/xnr37hf0yz',
                        'expanded_url': 'http://tumblr.com/xnr37hf0yz',
                        'indices': [107, 126],
                        'url': 'https://#/cCIWIwg'}],
              'user_mentions': []},
 'place': None,
 'source': '<a href="http://www.tumblr.com/" rel="nofollow">Tumblr</a>',
 'truncated': False,
 'user': {'contributors_enabled': True,
          'default_profile': False,
          'entities': {'hashtags': [], 'urls': [], 'user_mentions': []},
          'favourites_count': 20,
          'id_str': '6253282',
          'profile_link_color': '0094C2'}}

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

pprintpp-0.4.0.tar.gz (18.0 kB 查看散列)

上传时间

构建分布

pprintpp-0.4.0-py2.py3-none-any.whl (17.0 kB 查看散列)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面