Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

pprint 모듈(데이터 프리티 프린터)

<시간/>

pprint 모듈(lib/pprint.py)은 표준 Python 배포판과 함께 배포되는 Python 표준 라이브러리의 일부입니다. pprint라는 이름은 예쁜 프린터를 의미합니다. pprint 모듈의 기능은 Python 데이터 구조의 미학적으로 보기 좋은 모양을 가능하게 합니다. Python 인터프리터가 올바르게 구문 분석할 수 있는 모든 데이터 구조는 우아한 형식으로 지정됩니다. 서식이 지정된 표현식은 가능한 한 한 줄로 유지되지만 길이가 서식의 너비 매개변수를 초과하면 여러 줄로 나뉩니다. pprint 출력의 한 가지 고유한 기능은 표시 표현의 형식이 지정되기 전에 사전이 자동으로 정렬된다는 것입니다.

pprint 모듈은 PrettyPrinter 클래스의 정의를 포함합니다. 생성자는 다음 형식을 취합니다 -

pprint.PrettyPrinter(indent, width, depth, stream, compact)

indent 매개변수는 각 재귀 수준에 추가되는 들여쓰기를 정의합니다. 기본값은 1입니다.

너비 매개변수는 기본적으로 80입니다. 원하는 출력은 이 값으로 제한됩니다. 길이가 너비보다 크면 여러 줄로 나뉩니다.

깊이 매개변수는 인쇄할 레벨 수를 제어합니다.

스트림 매개변수는 기본적으로 기본 출력 장치인 std.out입니다. 파일과 같은 모든 스트림 개체를 사용할 수 있습니다.

압축 매개변수 ID는 기본적으로 False로 설정됩니다. true인 경우 너비 내에서 조정 가능한 데이터만 표시됩니다.

PrettyPrinter 클래스는 다음 메소드를 정의합니다 -

pprint() - PrettyPrinter 개체의 형식화된 표현을 인쇄합니다.

형식() − 생성자에 대한 매개변수를 기반으로 개체의 형식이 지정된 표현을 반환합니다.

다음 예제는 PrettyPrinter 클래스의 간단한 사용을 보여줍니다.

import pprint
students = {"Dilip":["English", "Maths", "Science"],
   "Raju":{"English":50,"Maths":60, "Science":70},
   "Kalpana":(50,60,70)}
pp = pprint.PrettyPrinter()
print ("normal print output")
print (students)
print ("----")
print ("pprint output")
pp.pprint(students)

출력물은 정상적일 뿐만 아니라 예쁜 인쇄 디스플레이를 보여줍니다.

normal print output
{'Dilip': ['English', 'Maths', 'Science'], 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}, 'Kalpana': (50, 60, 70)}
----
pprint output
{'Dilip': ['English', 'Maths', 'Science'],
'Kalpana': (50, 60, 70),
'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}

pprint 모듈은 또한 PrettyPrinter 메소드에 해당하는 편의 함수 pprint() 및 pformat()을 정의합니다. 아래 예제는 pprint() 함수를 사용합니다.

from pprint import pprint
students = {"Dilip":["English", "Maths", "Science"],
"Raju":{"English":50,"Maths":60, "Science":70},
"Kalpana":(50,60,70)}
print ("normal print output")
print (students)
print ("----")
print ("pprint output")
pprint (students)

다음 예제에서는 pformat() 함수와 함께 pformat() 메서드를 사용합니다. pformat() 메소드를 사용하기 위해서는 먼저 PrettyPrinter 객체를 설정해야 합니다. 두 경우 모두 형식이 지정된 표현은 일반 print() 함수를 사용하여 표시됩니다.

import pprint
students = {"Dilip":["English", "Maths", "Science"],
"Raju":{"English":50,"Maths":60, "Science":70},
"Kalpana":(50,60,70)}
print ("using pformat method")
pp = pprint.PrettyPrinter()
string = pp.pformat(students)
print (string)
print ('------')
print ("using pformat function")
string = pprint.pformat(students)
print (string)

다음은 위 코드의 출력입니다.

using pformat method
{'Dilip': ['English', 'Maths', 'Science'],
'Kalpana': (50, 60, 70),
'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
------
using pformat function
{'Dilip': ['English', 'Maths', 'Science'],
'Kalpana': (50, 60, 70),
'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}

예쁜 프린터는 사용자 정의 클래스와 함께 사용할 수도 있습니다. 클래스 내부에서 __repr__() 메서드가 재정의됩니다. __repr__() 메서드는 repr() 함수를 사용할 때 호출됩니다. 파이썬 객체의 공식 문자열 표현입니다. object를 print() 함수의 매개변수로 사용하면 repr() 함수의 반환 값을 출력합니다.

다음 예에서 __repr__() 메서드는 플레이어 객체의 문자열 표현을 반환합니다.

import pprint
class player:
def __init__(self, name, formats = [], runs = []):
self.name = name
self.formats = formats
self.runs = runs
def __repr__(self):
dct = {}
dct[self.name] = dict(zip(self.formats,self.runs))
return (repr(dct))
l1 = ['Tests','ODI','T20']
l2 = [[140, 45, 39],[15,122,36,67, 100, 49],[78,44, 12, 0, 23, 75]]
p1 = player("virat",l1,l2)
pp = pprint.PrettyPrinter()
pp.pprint(p1)

위 코드의 출력은 -

{'virat': {'Tests': [140, 45, 39], 'ODI': [15, 122, 36, 67, 100, 49], 'T20': [78, 44, 12, 0, 23, 75]}}

pprint를 사용한 재귀 데이터 구조

pprint를 사용하여 재귀 객체를 인쇄하려고 하면 첫 번째 표현만 표시되고 후속 재귀에서는 해당 참조만 인쇄됩니다.

>>> import pprint
>>> numbers = list(range(1,6))
>>> numbers.append(numbers)
>>> print (numbers)
[1, 2, 3, 4, 5, [...]]
>>> pprint.pprint(numbers)
[1, 2, 3, 4, 5, <Recursion on list with id=1403633698824>]

출력 너비 제한

너비 매개변수를 기본값 80에서 다른 값으로 변경하면 구문을 위반하지 않도록 주의하면서 여러 줄이 표시되는 방식으로 출력 형식이 지정됩니다.

import pprint
students = {"Dilip":["English", "Maths", "Science"],
"Raju":{"English":50,"Maths":60, "Science":70},
"Kalpana":(50,60,70)}
pp=pprint.PrettyPrinter(width = 20)
pp.pprint(students)

코드는 이 문서의 첫 번째 예제와 유사합니다. 그러나 PrettyPrinter 개체는 너비 매개변수를 20으로 하여 구성됩니다. 따라서 pprint 출력은 그에 따라 형식이 지정됩니다.

{'Dilip': [ 'English',
   'Maths',
   'Science'],
'Kalpana': (50,
   60,
   70),
'Raju': {'English': 50,
   'Maths': 60,
   'Science': 70}}