Di PHP, saya bisa melakukan ini:
echo '<pre>'
print_r($array);
echo '</pre>'
Dengan Python, saat ini saya hanya melakukan ini:
print the_list
Namun, ini akan menyebabkan jumbo data yang besar. Apakah ada cara untuk mencetaknya dengan baik menjadi pohon yang dapat dibaca? (dengan indentasi)?
import pprint
?pprint.pprint(the_list)
biasanya itu hanya masalah preferensi pribadi. Saya memilih untuk memiliki kekacauan ekstra di baris impor dalam kasus ini.stream=
, defaultnya adalah stdout. docs.python.org/3/library/pprint.htmlPeretasan cepat saat men-debug yang berfungsi tanpa harus mengimpor
pprint
adalah bergabung dengan daftar'\n'
.>>> lst = ['foo', 'bar', 'spam', 'egg'] >>> print '\n'.join(lst) foo bar spam egg
sumber
None
.print '\n'.join(map(str, lst))
Cukup dengan "membongkar" daftar dalam argumen fungsi cetak dan menggunakan baris baru (\ n) sebagai pemisah.
cetak (* lst, sep = '\ n')
lst = ['foo', 'bar', 'spam', 'egg'] print(*lst, sep='\n') foo bar spam egg
sumber
from __future__ import print_function
Terima kasih atas komentarnya.Maksudmu seperti ...:
>>> 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'] >>>
...? Dari deskripsi sepintas Anda, pprint modul perpustakaan standar adalah hal pertama yang terlintas dalam pikiran; namun, jika Anda dapat mendeskripsikan contoh input dan output (sehingga Anda tidak perlu mempelajari PHP untuk membantu Anda ;-), kami mungkin dapat menawarkan bantuan yang lebih spesifik!
sumber
import json some_list = ['one', 'two', 'three', 'four'] print(json.dumps(some_list, indent=4))
Keluaran:
[ "one", "two", "three", "four" ]
sumber
https://docs.python.org/3/library/pprint.html
Jika Anda membutuhkan teks (untuk digunakan dengan kutukan misalnya):
import pprint myObject = [] myText = pprint.pformat(myObject)
Kemudian
myText
variabel akan mirip seperti phpvar_dump
atauprint_r
. Periksa dokumentasi untuk lebih banyak opsi, argumen.sumber
Karena jawaban lain menyarankan modul pprint melakukan triknya.
Meskipun demikian, dalam kasus debugging di mana Anda mungkin perlu meletakkan seluruh daftar ke dalam beberapa file log, seseorang mungkin harus menggunakan metode pformat bersama dengan logging modul bersama dengan 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))
Dan jika Anda perlu memasukkannya secara langsung ke File, seseorang harus menentukan aliran keluaran, menggunakan kata kunci aliran. Ref
from pprint import pprint with open('output.txt', 'wt') as out: pprint(myTree, stream=out)
Lihat jawaban Stefano Sanfilippo
sumber
Untuk Python 3 , saya melakukan hal yang sama seperti jawaban shxfee :
def print_list(my_list): print('\n'.join(my_list)) a = ['foo', 'bar', 'baz'] print_list(a)
keluaran yang mana
Selain itu, saya menggunakan fungsi helper yang serupa untuk melihat kolom di DataFrame panda dengan cepat
def print_cols(df): print('\n'.join(df.columns))
sumber
Seperti jawaban lain yang telah disebutkan,
pprint
ini adalah modul hebat yang akan melakukan apa yang Anda inginkan. Namun jika Anda tidak ingin mengimpornya dan hanya ingin mencetak keluaran debugging selama pengembangan, Anda dapat memperkirakan keluarannya.Beberapa dari jawaban lain berfungsi dengan baik untuk string, tetapi jika Anda mencobanya dengan objek kelas, itu akan memberi Anda kesalahan
TypeError: sequence item 0: expected string, instance found
.Untuk objek yang lebih kompleks, pastikan kelas memiliki
__repr__
metode yang mencetak informasi properti yang Anda inginkan:class Foo(object): def __init__(self, bar): self.bar = bar def __repr__(self): return "Foo - (%r)" % self.bar
Dan kemudian ketika Anda ingin mencetak hasilnya, cukup petakan daftar Anda ke
str
fungsi seperti ini:l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)] print "[%s]" % ",\n ".join(map(str,l))
keluaran:
[Foo - (10), Foo - (20), Foo - ('A string'), Foo - (2.4)]
Anda juga bisa melakukan hal-hal seperti mengganti
__repr__
metodelist
untuk mendapatkan bentuk pencetakan cantik bersarang: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
memberi
[first, 2, [another, list, here], last]
Sayangnya tidak ada indentasi tingkat kedua tetapi untuk debug cepat dapat berguna.
sumber
Anda juga dapat memutar melalui daftar Anda:
def fun(): for i in x: print(i) x = ["1",1,"a",8] fun()
sumber