一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中的pprint模塊

Python中的pprint模塊

2022-03-09 00:09小小程序員ol Python

本文介紹了 Python中的pprint模塊,pprint模塊包含一個“美觀打印機”,用于生成數據結構的一個美觀的視圖。格式化工具會生成數據結構的一些表示,不僅能夠由解釋器正確地解析,還便于人閱讀。輸出會盡可能放在一行上,分解為

一. pprint美觀打印數據結構

pprint模塊包含一個“美觀打印機”,用于生成數據結構的一個美觀的視圖。格式化工具會生成數據結構的一些表示,不僅能夠由解釋器正確地解析,還便于人閱讀。輸出會盡可能放在一行上,分解為多行時會縮進。

1.打印

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from pprint import pprint
 
data = [
 
    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',
 
         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),
 
    (3, ['m', 'n']),
 
    (4, ['o', 'p', 'q']),
 
    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),
 
]
 
print('PRINT:')
 
print(data)
 
print()
 
print('PPRINT:')
 
pprint(data)

pprint()格式化一個對象,并把它作為參數傳入一個數據流(或者是默認的sys.stdout)。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
PRINT:
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}), (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}), (3, ['m', 'n']), (4, ['o', 'p', 'q']), (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]
 
 
 
PPRINT:
 
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
 (2,
 
  {'e': 'E',
 
   'f': 'F',
 
   'g': 'G',
 
   'h': 'H',
 
   'i': 'I',
 
   'j': 'J',
 
   'k': 'K',
 
   'l': 'L'}),
 
 (3, ['m', 'n']),
 
 (4, ['o', 'p', 'q']),
 
 (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

2 .格式化

要格式化一個數據結構而不是把它直接寫入一個流(即用于日志),可以使用pformat()來構建一個字符串表示。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import logging
 
from pprint import pformat
 
 
 
data = [
 
    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',
 
         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),
 
    (3, ['m', 'n']),
 
    (4, ['o', 'p', 'q']),
 
    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),
 
]
 
logging.basicConfig(
 
    level=logging.DEBUG,
 
    format='%(levelname)-8s %(message)s',
 
)
 
logging.debug('Logging pformatted data')
 
formatted = pformat(data)
 
for line in formatted.splitlines():
 
    logging.debug(line.rstrip())

然后可以單獨打印這個格式化的字符串或者記入日志。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DEBUG    Logging pformatted data
 
DEBUG    [(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
DEBUG     (2,
 
DEBUG      {'e': 'E',
 
DEBUG       'f': 'F',
 
DEBUG       'g': 'G',
 
DEBUG       'h': 'H',
 
DEBUG       'i': 'I',
 
DEBUG       'j': 'J',
 
DEBUG       'k': 'K',
 
DEBUG       'l': 'L'}),
 
DEBUG     (3, ['m', 'n']),
 
DEBUG     (4, ['o', 'p', 'q']),
 
DEBUG     (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

3. 任意類

如果一個定制類定義了一個__repr__()方法,那么pprint()使用的PrettyPrinter類還可以處理這樣的定制類。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from pprint import pprint
 
class node:
 
    def __init__(self, name, contents=[]):
 
        self.name = name
 
        self.contents = contents[:]
 
 
 
    def __repr__(self):
 
        return (
 
                'node(' + repr(self.name) + ', ' +
 
                repr(self.contents) + ')'
 
        )
 
trees = [
 
    node('node-1'),
 
    node('node-2', [node('node-2-1')]),
 
    node('node-3', [node('node-3-1')]),
 
]
 
pprint(trees)

利用由PrettyPrinter組合的嵌套對象的表示來返回完整的字符串表示。

?
1
2
3
4
5
[node('node-1', []),
 
 node('node-2', [node('node-2-1', [])]),
 
 node('node-3', [node('node-3-1', [])])]

4. 遞歸

遞歸數據結構由指向原數據源的引用表示,形式為<Recursion on typename with id=number>

?
1
2
3
4
5
6
7
8
9
from pprint import pprint
 
local_data = ['a', 'b', 1, 2]
 
local_data.append(local_data)
 
print('id(local_data) =>', id(local_data))
 
pprint(local_data)

在這個例子中,列表local_data增加到其自身,這會創建一個遞歸引用。

?
1
2
3
id(local_data) => 2763816527488
 
['a', 'b', 1, 2, <Recursion on list with id=2763816527488>]

5. 限制嵌套輸出

對于非常深的數據結構,可能不要求輸出中包含所有細節。數據有可能沒有適當地格式化,也可能格式化文本過大而無法管理,或者有些數據可能是多余的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from pprint import pprint
 
data = [
 
    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',
 
         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),
 
    (3, ['m', 'n']),
 
    (4, ['o', 'p', 'q']),
 
    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),
 
]
 
pprint(data, depth=1)
 
pprint(data, depth=2)

使用depth參數可以控制美觀打印機遞歸處理嵌套數據結構的深度。輸出中未包含的層次用省略號表示。

?
1
2
3
[(...), (...), (...), (...), (...)]
 
[(1, {...}), (2, {...}), (3, [...]), (4, [...]), (5, [...])]

6.控制輸出寬度

格式化文本的默認輸出寬度為80列。要調整這個寬度,可以在pprint()中使用參數width

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from pprint import pprint
 
data = [
 
    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',
 
         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),
 
    (3, ['m', 'n']),
 
    (4, ['o', 'p', 'q']),
 
    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),
 
]
 
for width in [80, 5]:
 
    print('WIDTH =', width)
 
    pprint(data, width=width)
 
    print()

當寬度太小而不能滿足格式化數據結構時,倘若截斷或轉行會導致非法語法,那么便不會截斷或轉行。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
WIDTH = 80
 
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
 (2,
 
  {'e': 'E',
 
   'f': 'F',
 
   'g': 'G',
 
   'h': 'H',
 
   'i': 'I',
 
   'j': 'J',
 
   'k': 'K',
 
   'l': 'L'}),
 
 (3, ['m', 'n']),
 
 (4, ['o', 'p', 'q']),
 
 (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]
 
WIDTH = 5
 
[(1,
 
  {'a': 'A',
 
   'b': 'B',
 
   'c': 'C',
 
   'd': 'D'}),
 
 (2,
 
  {'e': 'E',
 
   'f': 'F',
 
   'g': 'G',
 
   'h': 'H',
 
   'i': 'I',
 
   'j': 'J',
 
   'k': 'K',
 
   'l': 'L'}),
 
 (3,
 
  ['m',
 
   'n']),
 
 (4,
 
  ['o',
 
   'p',
 
   'q']),
 
 (5,
 
  ['r',
 
   's',
 
   'tu',
 
   'v',
 
   'x',
 
   'y',
 
   'z'])]

compact標志告訴pprint()嘗試在每一行上放置更多數據,而不是把復雜數據結構分解為多行。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from pprint import pprint
 
data = [
 
    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',
 
         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),
 
    (3, ['m', 'n']),
 
    (4, ['o', 'p', 'q']),
 
    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),
 
]
 
for width in [80, 5]:
 
    print('WIDTH =', width)
 
    pprint(data, width=width)
 
    print()

這個例子展示了一個數據結構再一行上放不下時,它會分解(數據列表中的第二項也是如此)。如果多個元素可以放置在一行上(如第三個和第四個成員),那么便會把它們放在同一行上。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
WIDTH = 80
 
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),
 
 (2,
 
  {'e': 'E',
 
   'f': 'F',
 
   'g': 'G',
 
   'h': 'H',
 
   'i': 'I',
 
   'j': 'J',
 
   'k': 'K',
 
   'l': 'L'}),
 
 (3, ['m', 'n']),
 
 (4, ['o', 'p', 'q']),
 
 (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]
 
 
 
WIDTH = 5
 
[(1,
 
  {'a': 'A',
 
   'b': 'B',
 
   'c': 'C',
 
   'd': 'D'}),
 
 (2,
 
  {'e': 'E',
 
   'f': 'F',
 
   'g': 'G',
 
   'h': 'H',
 
   'i': 'I',
 
   'j': 'J',
 
   'k': 'K',
 
   'l': 'L'}),
 
 (3,
 
  ['m',
 
   'n']),
 
 (4,
 
  ['o',
 
   'p',
 
   'q']),
 
 (5,
 
  ['r',
 
   's',
 
   'tu',
 
   'v',
 
   'x',
 
   'y',
 
   'z'])]

到此這篇關于 Python中的pprint模塊的文章就介紹到這了,更多相關 Python pprint模塊內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/python960410445/p/15541962.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产日韩精品一区二区 | 精品人人做人人爽久久久 | 国产成人综合精品 | 日韩在线天堂 | 天堂精品高清1区2区3区 | 高清不卡一区 | 亚洲AV久久无码精品九九软件 | 深夜在线小视频 | 含羞草传媒每天免费一次破解 | 波多野结衣在线观看中文字幕 | 青久久| 免费一级欧美片在线观看 | 91九色最新地址 | 欧美一区二区三区在线观看不卡 | a级情欲片在线观看hd | 色就色综合 | 天天干女人 | 久久亚洲成a人片 | 免费毛片大全 | 日韩免费在线观看 | 69日本人 | 无遮无挡免费视频 | 337p大尺度啪啪人体午夜2020 | 精品欧美一区二区在线观看欧美熟 | 国产精品久久久久久久久久久搜索 | 秋霞在线观看成人高清视频51 | 国语视频高清在线观看 | 亚洲精品免费在线 | 久久中文骚妇内射 | 日韩 欧美 国产 亚洲 中文 | 日韩欧美三级视频 | 韩国伦理hd | 99久久综合给久久精品 | 午夜伦理电影在线观免费 | 国产亚洲精品91 | 97理伦 | 日本xx高清视频免费观看 | 成年性生交大片免费看 | 激情视频在线播放 | 日韩一卡2卡3卡新区网站 | 美女被躁了在线观看视频 |