2009-10-06 14 views

答えて

92
from pprint import pprint 
pprint(the_list) 
+0

ファイルへの印刷はいかがですか? – Mawg

+2

'import pprint'を使わないのはなぜですか? – clankill3r

+7

@ clankill3rなら、 'pprint.pprint(the_list)'を使う必要があります。通常は個人的な好みの問題です。私はこの場合、輸入ラインに余計な混乱を招くことにしました。 –

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_dumpまたはprint_r。その他のオプションや引数については、ドキュメントを参照してください。

11

print関数の引数でリストを "アンパック"し、区切り記号として改行(\ n)を使用するだけです。他の回答として

プリント(* LST、9月= '\ n' は)

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

foo 
bar 
spam 
egg 
+0

残念ながら、Python 3でしか使用できません。 –

0

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キーワードを使用して出力ストリームを指定する必要があります。 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] 

残念ながら、セカンドレベルのインデントを与えないが、迅速なデバッグのために、それ有用である可能性があります。

関連する問題