파이썬/파이썬(python) 중급

[39-2 파이썬] pprint() 함수, keyword argument: depth, width, indent, stream, sort_dict

Olivia-BlackCherry 2022. 10. 3. 14:22

pprint()

from pprint import pprint

pretty print의 약자로,

예쁘게 print해주는 함수이다. 

 

예쁘다의 의미는,

많은 양의 데이터, 특히 크롤링을 한 json파일을 다룰 때

사용자가 보기 쉽도록 가독성을 높여 출력해준다는 것이다.

 

ex) print() 를 사용할 때

{'prices': [{'city': 'Paris', 'iataCode': '', 'lowestPrice': 54, 'id': 2}, {'city': 'Berlin', 'iataCode': '', 'lowestPrice': 42, 'id': 3}, {'city': 'Tokyo', 'iataCode': '', 'lowestPrice': 485, 'id': 4}, {'city': 'Sydney', 'iataCode': '', 'lowestPrice': 551, 'id': 5}, {'city': 'Istanbul', 'iataCode': '', 'lowestPrice': 95, 'id': 6}, {'city': 'Kuala Lumpur', 'iataCode': '', 'lowestPrice': 414, 'id': 7}, {'city': 'New York', 'iataCode': '', 'lowestPrice': 240, 'id': 8}, {'city': 'San Francisco', 'iataCode': '', 'lowestPrice': 260, 'id': 9}, {'city': 'Cape Town', 'iataCode': '', 'lowestPrice': 378, 'id': 10}]}

ex) pprint() 를 사용할 때

{'prices': [{'city': 'Paris', 'iataCode': '', 'id': 2, 'lowestPrice': 54},
            {'city': 'Berlin', 'iataCode': '', 'id': 3, 'lowestPrice': 42},
            {'city': 'Tokyo', 'iataCode': '', 'id': 4, 'lowestPrice': 485},
            {'city': 'Sydney', 'iataCode': '', 'id': 5, 'lowestPrice': 551},
            {'city': 'Istanbul', 'iataCode': '', 'id': 6, 'lowestPrice': 95},
            {'city': 'Kuala Lumpur',
             'iataCode': '',
             'id': 7,
             'lowestPrice': 414},
            {'city': 'New York', 'iataCode': '', 'id': 8, 'lowestPrice': 240},
            {'city': 'San Francisco',
             'iataCode': '',
             'id': 9,
             'lowestPrice': 260},
            {'city': 'Cape Town',
             'iataCode': '',
             'id': 10,
             'lowestPrice': 378}]}

 

 

 

 

keyword argument

<원본 print(results)>

{'locations': [{'id': 'CDG', 'int_id': 9667, 'airport_int_id': 9667, 'active': True, 'code': 'CDG', 'icao': 'LFPG', 'name': '파리 샤를 드 골 공항', 'slug': '파리-샤를-드-골-공항-파리-프랑스', 'slug_en': 'charles-de-gaulle-paris-france', 'alternative_names': ['Paris-Charles De Gaulle', 'Charles de Gaulle Airport', 'Aéroport de Paris-Charles-de-Gaulle'], 'rank': 23, 'global_rank_dst': 9, 'dst_popularity_score': 4383663.0, 'timezone': 'Europe/Paris', 'city': {'id': 'paris_fr', 'name': '파리', 'code': 'PAR', 'slug': '파리-프랑스', 'continent': {'id': 'europe', 'name': '유럽', 'slug': 'europe', 'code': 'EU'}, 'nearby_country': None, 'region': {'id': 'western-europe', 'name': 'Western Europe', 'slug': 'western-europe'}, 'subdivision': None, 'country': {'id': 'FR', 'name': '프랑스', 'slug': '프랑스', 'code': 'FR'}, 'autonomous_territory': None}, 'location': {'lat': 49.009722, 'lon': 2.547778}, 'alternative_departure_points': [{'id': 'FR-PLAI-PARC', 'distance': 16.69, 'duration': 796}, {'id': 'LIL', 'distance': 190.06, 'duration': 7266.3}, {'id': 'XCR', 'distance': 198.74, 'duration': 8435.4}, {'id': 'DOL', 'distance': 213.47, 'duration': 8513.2}, {'id': 'FR-PARI-PA10', 'distance': 22.52, 'duration': 1236.7}, {'id': 'FR-PARI-PAR9', 'distance': 27.21, 'duration': 1569.5}, {'id': 'FR-PARI-PAR3', 'distance': 27.37, 'duration': 1497.7}, {'id': 'FR-PARI-PA11', 'distance': 27.6, 'duration': 1586.1}, {'id': 'FR-PARI-PARI', 'distance': 28.62, 'duration': 1581.7}, {'id': 'FR-PARI-PAR1', 'distance': 30.33, 'duration': 1711.6}, {'id': 'FR-PARI-PAR2', 'distance': 30.48, 'duration': 1747}, {'id': 'FR-DISN-PARI', 'distance': 41.46, 'duration': 2213.1}, {'id': 'ORY', 'distance': 44.54, 'duration': 2554.2}, {'id': 'XJY', 'distance': 45.49, 'duration': 2562.7}, {'id': 'BVA', 'distance': 78.32, 'duration': 3340.6}], 'tags': [{'tag': 'sightseeing', 'month_to': -1, 'month_from': -1}, {'tag': 'culture', 'month_to': -1, 'month_from': -1}, {'tag': 'famous cities', 'month_to': -1, 'month_from': -1}, {'tag': 'romance', 'month_to': -1, 'month_from': -1}, {'tag': 'city break', 'month_to': -1, 'month_from': -1}], 'providers': [1028, 1035, 1053, 1064, 1096, 1128, 1148, 1163, 1165, 1175, 1227, 1229, 1282, 1283, 1291, 1329], 'special': [{'id': 'versailles_poi', 'name': 'Versailles', 'slug': 'versailles'}, {'id': 'eiffel-tower_poi', 'name': 'Eiffel Tower', 'slug': 'eiffel-tower'}, {'id': 'giverny_poi', 'name': 'Giverny', 'slug': 'giverny'}, {'id': 'le-cimetiere-de-pere-lachaise_poi', 'name': 'Le Cimetiere de Pere Lachaise', 'slug': 'le-cimetiere-de-pere-lachaise'}, {'id': 'louvre-museum_poi', 'name': 'Louvre Museum', 'slug': 'louvre-museum'}, {'id': 'notre-dame_poi', 'name': 'Notre Dame', 'slug': 'notre-dame'}], 'tourist_region': [{'id': 'greater-paris_poi', 'name': 'Greater Paris', 'slug': 'greater-paris'}, {'id': 'autoroute-utrecht-paris_poi', 'name': 'Autoroute Utrecht Paris', 'slug': 'autoroute-utrecht-paris'}, {'id': 'ile-de-france_poi', 'name': '일드 프랑스', 'slug': 'ile-de-france'}], 'car_rentals': [{'provider_id': 1175, 'providers_locations': ['644548']}], 'new_ground': False, 'routing_priority': 0, 'type': 'airport'}], 'meta': {'locale': {'code': 'ko-KR', 'status': 'OK'}}, 'last_refresh': 1664702017, 'results_retrieved': 1}

 

<기본 pprint(results) >

{'last_refresh': 1664702017,
 'locations': [{'active': True,
                'airport_int_id': 9667,
                'alternative_departure_points': [{'distance': 16.69,
                                                  'duration': 796,
                                                  'id': 'FR-PLAI-PARC'},
                                                 {'distance': 190.06,
                                                  'duration': 7266.3,
                                                  'id': 'LIL'},
                                                 {'distance': 198.74,
                                                  'duration': 8435.4,
                                                  'id': 'XCR'},
                                                 {'distance': 213.47,
                                                  'duration': 8513.2,
                                                  'id': 'DOL'},
                                                 {'distance': 22.52,
                                                  'duration': 1236.7,
                                                  'id': 'FR-PARI-PA10'},
                                                 {'distance': 27.21,
                                                  'duration': 1569.5,
                                                  'id': 'FR-PARI-PAR9'},
                                                 {'distance': 27.37,
                                                  'duration': 1497.7,
                                                  'id': 'FR-PARI-PAR3'},
                                                 {'distance': 27.6,
                                                  'duration': 1586.1,
                                                  'id': 'FR-PARI-PA11'},
                                                 {'distance': 28.62,
                                                  'duration': 1581.7,
                                                  'id': 'FR-PARI-PARI'},
                                                 {'distance': 30.33,
                                                  'duration': 1711.6,
                                                  'id': 'FR-PARI-PAR1'},
                                                 {'distance': 30.48,
                                                  'duration': 1747,
                                                  'id': 'FR-PARI-PAR2'},
                                                 {'distance': 41.46,
                                                  'duration': 2213.1,
                                                  'id': 'FR-DISN-PARI'},
                                                 {'distance': 44.54,
                                                  'duration': 2554.2,
                                                  'id': 'ORY'},
                                                 {'distance': 45.49,
                                                  'duration': 2562.7,
                                                  'id': 'XJY'},
                                                 {'distance': 78.32,
                                                  'duration': 3340.6,
                                                  'id': 'BVA'}],
                'alternative_names': ['Paris-Charles De Gaulle',
                                      'Charles de Gaulle Airport',
                                      'Aéroport de Paris-Charles-de-Gaulle'],
                'car_rentals': [{'provider_id': 1175,
                                 'providers_locations': ['644548']}],
                'city': {'autonomous_territory': None,
                         'code': 'PAR',
                         'continent': {'code': 'EU',
                                       'id': 'europe',
                                       'name': '유럽',
                                       'slug': 'europe'},
                         'country': {'code': 'FR',
                                     'id': 'FR',
                                     'name': '프랑스',
                                     'slug': '프랑스'},
                         'id': 'paris_fr',
                         'name': '파리',
                         'nearby_country': None,
                         'region': {'id': 'western-europe',
                                    'name': 'Western Europe',
                                    'slug': 'western-europe'},
                         'slug': '파리-프랑스',
                         'subdivision': None},
                'code': 'CDG',
                'dst_popularity_score': 4383663.0,
                'global_rank_dst': 9,
                'icao': 'LFPG',
                'id': 'CDG',
                'int_id': 9667,
                'location': {'lat': 49.009722, 'lon': 2.547778},
                'name': '파리 샤를 드 골 공항',
                'new_ground': False,
                'providers': [1028,
                              1035,
                              1053,
                              1064,
                              1096,
                              1128,
                              1148,
                              1163,
                              1165,
                              1175,
                              1227,
                              1229,
                              1282,
                              1283,
                              1291,
                              1329],
                'rank': 23,
                'routing_priority': 0,
                'slug': '파리-샤를-드-골-공항-파리-프랑스',
                'slug_en': 'charles-de-gaulle-paris-france',
                'special': [{'id': 'versailles_poi',
                             'name': 'Versailles',
                             'slug': 'versailles'},
                            {'id': 'eiffel-tower_poi',
                             'name': 'Eiffel Tower',
                             'slug': 'eiffel-tower'},
                            {'id': 'giverny_poi',
                             'name': 'Giverny',
                             'slug': 'giverny'},
                            {'id': 'le-cimetiere-de-pere-lachaise_poi',
                             'name': 'Le Cimetiere de Pere Lachaise',
                             'slug': 'le-cimetiere-de-pere-lachaise'},
                            {'id': 'louvre-museum_poi',
                             'name': 'Louvre Museum',
                             'slug': 'louvre-museum'},
                            {'id': 'notre-dame_poi',
                             'name': 'Notre Dame',
                             'slug': 'notre-dame'}],
                'tags': [{'month_from': -1,
                          'month_to': -1,
                          'tag': 'sightseeing'},
                         {'month_from': -1, 'month_to': -1, 'tag': 'culture'},
                         {'month_from': -1,
                          'month_to': -1,
                          'tag': 'famous cities'},
                         {'month_from': -1, 'month_to': -1, 'tag': 'romance'},
                         {'month_from': -1,
                          'month_to': -1,
                          'tag': 'city break'}],
                'timezone': 'Europe/Paris',
                'tourist_region': [{'id': 'greater-paris_poi',
                                    'name': 'Greater Paris',
                                    'slug': 'greater-paris'},
                                   {'id': 'autoroute-utrecht-paris_poi',
                                    'name': 'Autoroute Utrecht Paris',
                                    'slug': 'autoroute-utrecht-paris'},
                                   {'id': 'ile-de-france_poi',
                                    'name': '일드 프랑스',
                                    'slug': 'ile-de-france'}],
                'type': 'airport'}],
 'meta': {'locale': {'code': 'ko-KR', 'status': 'OK'}},
 'results_retrieved': 1}

 

1) depth 깊이

pprint(results, depth=1)

pprint(results, depth=2)

pprint(results, depth=3)

 

2) indent 들여쓰기 간격

pprint(results, depth=3, indent=4)

 

3) width 너비(한 줄에 출력한 최대 글자)

기본은 width= 80으로 한 줄에 최대 80자까지 출력된다.

pprint(results)

 

pprint(results, width = 200)

 

pprint(results, width = 500)

 

4) sort_dicts 딕셔너리를 키값에 따라 알파벳 순 정렬(=기본값)

a-z

pprint(results)

z-a

pprint(results, sort_dicts= False)

 

5) stream 로그 남기기 

with open("output.txt", mode="w") as file:
    pprint(results, stream=file)