如何缩进Python中的pprint?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (82)

我正在尝试缩进pprint的输出,这样我将得到一个带有pprint的8空格缩进。我使用的代码是:

import numpy as np
from pprint import pprint
A = np.array([1, 2, 3, 4])
f = open("log.txt", 'w')
n = 2
for i in range(n):
    A = A + 1
    f.writelines(list(u'    \u27B3 - %s\n'.encode('utf-8') % i for i in A))
    pprint(globals())

输出量

{'A': array([2, 3, 4, 5]),
 '__builtins__': <module '__builtin__' (built-in)>,
 '__doc__': None,
 '__file__': '~/Stack exchange/pprint_tab.py',
 '__name__': '__main__',
 '__package__': None,
 'f': <open file 'log.txt', mode 'w' at 0xb659b8b8>,
 'i': 0,
 'n': 2,
 'np': <module 'numpy' from '/usr/lib/python2.7/dist...,
 'pprint': <function pprint at 0xb6dea48c>}
{'A': array([3, 4, 5, 6]),
 '__builtins__': <module '__builtin__' (built-in)>,
 '__doc__': None,
 '__file__': '~/Stack exchange/pprint_tab.py',
 '__name__': '__main__',
 '__package__': None,
 'f': <open file 'log.txt', mode 'w' at 0xb659b8b8>,
 'i': 1,
 'n': 2,
 'np': <module 'numpy' from '/usr/lib/python2.7/dist...,
 'pprint': <function pprint at 0xb6dea48c>}

期望输出

        {'A': array([2, 3, 4, 5]),
         '__builtins__': <module '__builtin__' (built-in)>,
         '__doc__': None,
         '__file__': '~/Stack exchange/pprint_tab.py',
         '__name__': '__main__',
         '__package__': None,
         'f': <open file 'log.txt', mode 'w' at 0xb659b8b8>,
         'i': 0,
         'n': 2,
         'np': <module 'numpy' from '/usr/lib/python2.7/dist...,
         'pprint': <function pprint at 0xb6dea48c>}
        {'A': array([3, 4, 5, 6]),
         '__builtins__': <module '__builtin__' (built-in)>,
         '__doc__': None,
         '__file__': '~/Stack exchange/pprint_tab.py',
         '__name__': '__main__',
         '__package__': None,
         'f': <open file 'log.txt', mode 'w' at 0xb659b8b8>,
         'i': 1,
         'n': 2,
         'np': <module 'numpy' from '/usr/lib/python2.7/dist...,
         'pprint': <function pprint at 0xb6dea48c>}

总之,我需要一个空格缩进时,写入文件或打印与pprint。我试过

pp = pprint.PrettyPrinter(indent=8)

但是它不起作用

提问于
用户回答回答于

你不能pprint()若要添加额外的前导缩进。

你的最佳选择是使用pprint.pformat()功能相反,然后手动添加缩进:

from pprint import pformat

print ''.join([
    '        ' + l
    for l in pformat(globals()).splitlines(True)])

这使用str.splitlines()方法若要拆分pformat()输出到分隔行以便于重新连接。

在Python 3中,缩进可以通过textwrap.indent():

from pprint import pformat
from textwrap import indent

print(indent(pformat(globals()),
             '        '))
用户回答回答于

对Martijn的回答做了小的更新。不需要在简单的str conat中使用.mat()。还可以使用tuple而不是list:

from pprint import pformat

def left_indent(text, indent=' ' * 8):
    return ''.join((indent + l for l in text.splitlines(True)))

print(indent(pformat(data)))

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励