파이썬에서 "멋지게"목록을 인쇄하는 방법


88

PHP에서는 다음과 같이 할 수 있습니다.

echo '<pre>'
print_r($array);
echo '</pre>'

Python에서는 현재 다음과 같이합니다.

print the_list

그러나 이로 인해 엄청난 양의 데이터가 발생합니다. 읽을 수있는 트리로 멋지게 인쇄 할 수있는 방법이 있습니까? (들여 쓰기 포함)?

답변:


167
from pprint import pprint
pprint(the_list)

얼마나 예쁜 파일로 인쇄 할 수 있습니까?
Mawg는 분석 재개 모니카 말한다

5
왜 그냥 사용하지 import pprint않습니까?
clankill3r

18
@ clankill3r, 당신은 pprint.pprint(the_list)일반적으로 개인적인 취향의 문제 를 사용해야 합니다. 이 경우 가져 오기 라인에 추가 혼란이 생기도록 선택했습니다.
John La Rooy

2
@Mawg,를 사용하여 출력 스트림을 지정할 수 stream=있으며 기본값은 stdout입니다. docs.python.org/3/library/pprint.html
John La Rooy

Ipython REPL에서 기본적으로 활성화되어 있습니다
azzamsa

31

가져올 필요없이 작동하는 디버깅 중 빠른 해킹 pprint'\n'.

>>> lst = ['foo', 'bar', 'spam', 'egg']
>>> print '\n'.join(lst)
foo
bar
spam
egg

목록에 None.
Noumenon

쉬운 솔루션은`같은 형식의 할 수있다 "목록 *을 {}"형식 ( '\ n *'.join (LST)).
dannydedog

목록 뭔가 다른 다음 문자열을 포함하는 경우 당신은 무엇을해야print '\n'.join(map(str, lst))
정신

24

인쇄 함수 인수의 목록을 "압축 해제"하고 구분 기호로 개행 문자 (\ n)를 사용하면됩니다.

print (* lst, sep = '\ n')

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

foo
bar
spam
egg

2
니스하지만 파이썬 3에서 불행하게도에서만 사용 가능
안토니 Labarre

1
Python 2.7에서 정말로 필요하다면 나중에 인쇄 기능을 가져올 수 있습니다 from __future__ import print_function . 의견 주셔서 감사합니다.
MarcoP

21

당신은 다음과 같은 것을 의미합니다 ... :

>>> 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를 배울 필요가 없습니다 ;-), 우리가보다 구체적인 도움을 제공 할 수 있습니다!


5
import json
some_list = ['one', 'two', 'three', 'four']
print(json.dumps(some_list, indent=4))

산출:

[
    "one",
    "two",
    "three",
    "four"
]

2

https://docs.python.org/3/library/pprint.html

텍스트가 필요한 경우 (예 : curses와 함께 사용) :

import pprint

myObject = []

myText = pprint.pformat(myObject)

그런 다음 myText변수는 php var_dump또는 print_r. 더 많은 옵션, 인수에 대한 문서를 확인하십시오.


2

다른 답변에서 알 수 있듯이 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)

참조 스테파노 대해 Sanfilippo의 답변을


2

들어 파이썬 3 , I는 다음과 같이 물건의 같은 종류의 일을 shxfee의 대답 :

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))

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)]

중첩 된 예쁜 인쇄 형태를 얻기 위해 의 __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 단계 들여 쓰기는 없지만 빠른 디버그를 위해서는 유용 할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.