在PHP中,我可以這樣做:如何打印在Python 「很好」 列表
echo '<pre>'
print_r($array);
echo '</pre>'
在Python,我目前只是這樣做:
print the_list
然而,這會導致大量的數據。有什麼方法將它很好地打印到可讀的樹中? (有縮進)?
在PHP中,我可以這樣做:如何打印在Python 「很好」 列表
echo '<pre>'
print_r($array);
echo '</pre>'
在Python,我目前只是這樣做:
print the_list
然而,這會導致大量的數據。有什麼方法將它很好地打印到可讀的樹中? (有縮進)?
from pprint import pprint
pprint(the_list)
你的意思是這樣...:
>>> 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以幫助您;-),則我們可能會提供更具體的幫助!
在不需要導入pprint
的情況下進行調試的快速入侵將會加入'\n'
的列表。
>>> lst = ['foo', 'bar', 'spam', 'egg']
>>> print '\n'.join(lst)
foo
bar
spam
egg
https://docs.python.org/3/library/pprint.html
如果你需要的文本(與詛咒例如使用):
import pprint
myObject = []
myText = pprint.pformat(myObject)
然後myText
變量的東西都PHP var_dump
或print_r
。檢查文檔以獲取更多選項和參數。
只需在打印函數參數中「解包」列表並使用換行符(\ n)作爲分隔符即可。
打印(* LST,九月= '\ n')
lst = ['foo', 'bar', 'spam', 'egg']
print(*lst, sep='\n')
foo
bar
spam
egg
很好,但不幸的是只能在Python 3中使用。 – 2018-02-08 16:50:42
作爲其他的答案提示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)
至於其他的答案也提到,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]
遺憾的是沒有第二級縮進,但對於一個快速調試它可以是有用的。
如何打印到一個文件? – Mawg 2016-04-29 10:30:26
爲什麼不使用'import pprint'? – clankill3r 2017-03-08 16:57:25
@ clankill3r,那麼你需要使用'pprint.pprint(the_list)'通常這只是個人喜好的問題。在這種情況下,我選擇在進口生產線上增加雜物。 – 2017-03-09 02:19:40