【发布时间】:2009-10-06 04:55:40
【问题描述】:
在 PHP 中,我可以这样做:
echo '<pre>'
print_r($array);
echo '</pre>'
在 Python 中,我目前只是这样做:
print the_list
但是,这会导致大量数据。有没有办法将它很好地打印到可读的树中? (有缩进)?
【问题讨论】:
标签: python
在 PHP 中,我可以这样做:
echo '<pre>'
print_r($array);
echo '</pre>'
在 Python 中,我目前只是这样做:
print the_list
但是,这会导致大量数据。有没有办法将它很好地打印到可读的树中? (有缩进)?
【问题讨论】:
标签: python
from pprint import pprint
pprint(the_list)
【讨论】:
import pprint?
pprint.pprint(the_list) 通常这只是个人喜好问题。在这种情况下,我选择在导入行中添加额外的混乱。
stream=指定输出流,默认为stdout。 docs.python.org/3/library/pprint.html
只需“解压”打印函数参数中的列表并使用换行符 (\n) 作为分隔符。
打印(*lst, sep='\n')
lst = ['foo', 'bar', 'spam', 'egg']
print(*lst, sep='\n')
foo
bar
spam
egg
【讨论】:
from __future__ import print_function 导入打印功能。感谢您的评论。
* 很重要,让我等一下 x)
在无需导入pprint 的情况下进行调试的快速技巧是加入'\n' 上的列表。
>>> lst = ['foo', 'bar', 'spam', 'egg']
>>> print '\n'.join(lst)
foo
bar
spam
egg
【讨论】:
None时出现类型错误。
print '\n'.join(map(str, lst))
你的意思是......:
>>> 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;-),我们可能会提供更具体的帮助!
【讨论】:
import json
some_list = ['one', 'two', 'three', 'four']
print(json.dumps(some_list, indent=4))
输出:
[
"one",
"two",
"three",
"four"
]
【讨论】:
https://docs.python.org/3/library/pprint.html
如果您需要文本(例如与 curses 一起使用):
import pprint
myObject = []
myText = pprint.pformat(myObject)
然后myText 变量将类似于 php var_dump 或 print_r。查看文档以获取更多选项和参数。
【讨论】:
对于Python 3,我做的事情和shxfee's answer一样:
def print_list(my_list):
print('\n'.join(my_list))
a = ['foo', 'bar', 'baz']
print_list(a)
哪个输出
foo
bar
baz
顺便说一句,我使用类似的辅助函数来快速查看 pandas DataFrame 中的列
def print_cols(df):
print('\n'.join(df.columns))
【讨论】:
正如其他答案所暗示的那样, pprint 模块可以解决问题。
尽管如此,在调试的情况下,您可能需要将整个列表放入某个日志文件中,可能必须使用 pformat 方法以及模块 logging 和 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))
如果您需要直接将其记录到文件中,则必须使用 stream 关键字指定输出流。 Ref
from pprint import pprint
with open('output.txt', 'wt') as out:
pprint(myTree, stream=out)
【讨论】:
正如其他答案所提到的,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]
很遗憾,没有二级缩进,但为了快速调试,它可能很有用。
【讨论】:
你也可以循环遍历你的列表:
def fun():
for i in x:
print(i)
x = ["1",1,"a",8]
fun()
【讨论】:
这是我经常使用的原始 python 方法!
代码如下所示:
list = ["a", "b", "c", "d", "e", "f", "g"]
for i in range(len(list)):
print(list[i])
输出:
a
b
c
d
e
f
g
【讨论】:
如果您只想按原样显示列表(带括号),请使用:
print(list(the_list))
【讨论】: