2009-10-06 83 views
39

在PHP中,我可以这样做:如何打印在Python “很好” 列表

echo '<pre>' 
print_r($array); 
echo '</pre>' 

在Python,我目前只是这样做:

print the_list 

然而,这会导致大量的数据。有什么方法将它很好地打印到可读的树中? (有缩进)?

回答

92
from pprint import pprint 
pprint(the_list) 
+0

如何打印到一个文件? – Mawg 2016-04-29 10:30:26

+2

为什么不使用'import pprint'? – clankill3r 2017-03-08 16:57:25

+7

@ clankill3r,那么你需要使用'pprint.pprint(the_list)'通常这只是个人喜好的问题。在这种情况下,我选择在进口生产线上增加杂物。 – 2017-03-09 02:19:40

17

你的意思是这样...:

>>> print L 
['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it'] 
>>> import pprint 
>>> pprint.pprint(L) 
['this', 
'is', 
'a', 
['and', 'a', 'sublist', 'too'], 
'list', 
'including', 
'many', 
'words', 
'in', 
'it'] 
>>> 

...?从您的粗略描述中,标准库模块pprint是首先想到的;但是,如果您可以描述示例输入和输出(以便不需要学习PHP以帮助您;-),则我们可能会提供更具体的帮助!

14

在不需要导入pprint的情况下进行调试的快速入侵将会加入'\n'的列表。

>>> lst = ['foo', 'bar', 'spam', 'egg'] 
>>> print '\n'.join(lst) 
foo 
bar 
spam 
egg 
2

https://docs.python.org/3/library/pprint.html

如果你需要的文本(与诅咒例如使用):

import pprint 

myObject = [] 

myText = pprint.pformat(myObject) 

然后myText变量的东西都PHP var_dumpprint_r。检查文档以获取更多选项和参数。

11

只需在打印函数参数中“解包”列表并使用换行符(\ n)作为分隔符即可。

打印(* LST,九月= '\ n')

lst = ['foo', 'bar', 'spam', 'egg'] 
print(*lst, sep='\n') 

foo 
bar 
spam 
egg 
+0

很好,但不幸的是只能在Python 3中使用。 – 2018-02-08 16:50:42

0

作为其他的答案提示pprint模块的伎俩。
尽管如此,在调试的情况下,您可能需要将整个列表放入某个日志文件,但可能必须使用pformat方法以及日志记录以及pprint。

import logging 
from pprint import pformat 

logger = logging.getLogger('newlogger') 
handler = logging.FileHandler('newlogger.log') 

formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
handler.setFormatter(formatter) 

logger.addHandler(handler) 
logger.setLevel(logging.WARNING) 

data = [ (i, { '1':'one', 
      '2':'two', 
      '3':'three', 
      '4':'four', 
      '5':'five', 
      '6':'six', 
      '7':'seven', 
      '8':'eight', 
      }) 
     for i in xrange(3) 
     ] 

logger.error(pformat(data)) 

如果你需要直接记录到一个文件,一个人必须要指定输出流,使用流关键字。 Ref

from pprint import pprint 

with open('output.txt', 'wt') as out: 
    pprint(myTree, stream=out) 

Stefano Sanfilippo's answer

0

至于其他的答案也提到,pprint是一个伟大的模块,可以做你想做的。但是,如果您不想导入它并只想在开发过程中打印调试输出,则可以估算其输出。

其他一些答案可以很好地适用于字符串,但是如果您尝试使用类对象,它会给您错误TypeError: sequence item 0: expected string, instance found

对于更复杂的对象,确保类有一个__repr__方法,打印您需要的属性信息:

class Foo(object): 
    def __init__(self, bar): 
     self.bar = bar 

    def __repr__(self): 
     return "Foo - (%r)" % self.bar 

然后当你要打印输出,只需将列表映射到str功能像这样:

l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)] 
print "[%s]" % ",\n ".join(map(str,l)) 

输出:

[Foo - (10), 
    Foo - (20), 
    Foo - ('A string'), 
    Foo - (2.4)] 

你也可以做这样的事情覆盖的list__repr__方法获取嵌套漂亮的印刷形式:

class my_list(list): 
    def __repr__(self): 
     return "[%s]" % ",\n ".join(map(str, self)) 

a = my_list(["first", 2, my_list(["another", "list", "here"]), "last"]) 
print a 

[first, 
2, 
[another, 
list, 
here], 
last] 

遗憾的是没有第二级缩进,但对于一个快速调试它可以是有用的。