2015-03-09 6 views
0

Я пытаюсь сделать отступ вывода pprint так, что я получу отпечаток в 8 пространств с помощью pprint. Код я использовал:Как отступать от pprint в Python?

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) 

, но он не работает

ответ

4

Вы не можете получить pprint() добавить дополнительный ведущий отступы, нет.

Ваш лучший вариант заключается в использовании pprint.pformat() function вместо, а затем добавить отступы вручную:

from pprint import pformat 

print ''.join(['  {}'.format(l) for l in pformat(globals()).splitlines(True)]) 

Это использует str.splitlines() method расколоть pformat() выход, чтобы отдельные линии для облегчения повторного ввода в.

Вы можете инкапсулировать, что повторное вступление в функцию:

def indent(text, indent=8): 
    fstring = ' ' * indent + '{}' 
    return ''.join([fstring.format(l) for l in text.splitlines(True)]) 

затем использовать:

print indent(pformat(globals()))