PHPでは、次のことができます。
echo '<pre>'
print_r($array);
echo '</pre>'
Pythonでは、現在これを行っています。
print the_list
ただし、これにより大量のデータが発生します。読みやすいツリーにうまく印刷する方法はありますか?(インデント付き)?
回答:
from pprint import pprint
pprint(the_list)
import pprintか?
pprint.pprint(the_list)通常は使用する必要がありますが、これは個人的な好みの問題です。この場合、インポート行に余分な雑然としたものを含めることにしました。
stream=。デフォルトはstdoutです。docs.python.org/3/library/pprint.html
インポートせずに機能するデバッグ中の簡単なハックpprintは、のリストに参加すること'\n'です。
>>> lst = ['foo', 'bar', 'spam', 'egg']
>>> print '\n'.join(lst)
foo
bar
spam
egg
Noneいる場合のTypeError 。
print '\n'.join(map(str, lst))
print関数の引数でリストを「解凍」し、区切り文字として改行(\ n)を使用するだけです。
print(* lst、sep = '\ n')
lst = ['foo', 'bar', 'spam', 'egg']
print(*lst, sep='\n')
foo
bar
spam
egg
from __future__ import print_function 。コメントありがとうございます。
あなたは次のような意味です...:
>>> 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変数はphpvar_dumpまたはprint_r。のようなものになります。その他のオプション、引数については、ドキュメントを確認してください。
他の答えが示唆するように、pprintモジュールがトリックを行います。
それでも、リスト全体をログファイルに入れる必要があるデバッグの場合は、pprintとともにモジュールロギングとともにpformatメソッドを使用する必要があります。
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キーワードを使用して出力ストリームを指定する必要があります。参照
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)]
の__repr__メソッドをオーバーライドしてlist、ネストされたプリティプリントの形式を取得するなどのこともできます。
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]
残念ながら、第2レベルのインデントはありませんが、迅速なデバッグには役立ちます。
リストをループすることもできます。
def fun():
for i in x:
print(i)
x = ["1",1,"a",8]
fun()