16 มกราคม 2558

Published 1/16/2558 by with 0 comment

แสดงข้อมูลแบบโครงสร้างสวย ๆ ด้วย pprint ใน Python

สวัสดีผู้อ่านทุกท่านครับ หลาย ๆ ท่านที่เขียนโปรแกรมบนภาษา Python คงคุ้นเคยกับคำสั่ง print กันเป็นอย่างดี คำสั่ง print เป็นคำสั่งที่ใช้แสดงข้อความในภาษา Python แต่ถ้านำคำสั่ง print ไปแสดงผลข้อมูลที่เป็นรูปแบบจะพบว่า อ่านยากและไม่สวยงาม เพราะเหตุจึงในคำสั่ง pprint ขึ้นมาใน Python ครับคำสั่ง pprint เป็นคำสั่งที่ใช้สำหรับแสดงผลลัพธ์ของข้อมูลที่เป็นข้อมูลแบบโครงสร้าง (data structures) ออกมาให้อ่านง่ายและสวยงาม เป็นระเบียบ

ตัวอย่างเปรียบเทียบ print กับ pprint ใน Python

[python]
>>> import pprint
>>> i=0
>>> data = [ (i, { 'แมว',
'กิน',
'ปลาทู่',
'หนู',
'ขโมย',
'แอบ',
'กิน',
'ปลาทู่ของแมว'
})
for i in range(3)
]
>>> print(data)
[(0, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}), (1, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}), (2, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'})]
>>> pprint.pprint(data)
[(0, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}),
(1, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}),
(2, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'})]
[/python]

จากตัวอย่าง เราจะเห็นความแตกต่างการแสดงผลลัพธ์ของข้อมูลระหว่าง print กับ pprint
ดังนั้น ในการแสดงผลข้อมูลที่เป็นข้อมูลแบบโครงสร้าง แนะนำให้ใช้คำสัาง pprint แทน print ครับ

เริ่มต้นใช้งาน pprint ใน Python
ในการใช้งาน pprint ต้อง

[python]
import pprint
[/python]

เข้ามาด้วยทุกครั้ง
การแสดงผลข้อมูลแบบโครงสร้างจะใช้คำสั่ง

[python]
pprint.pprint(ตัวแปรหรือข้อความ)
[/python]

เหมือนตัวอย่างข้างบน
นอกจากนั้นยังสามารถกำหนดค่า indent,width และ depth ให้กับข้อมูลได้ด้วยคำสั่ง

[python]
pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *)
[/python]


  • ค่า indent คือ ค่าที่ใช้สำหรับกำหนดค่าย่อหน้าให้กับข้อมูลแต่ละบรรทัด ตัวอย่างเช่น

    [python]
    >>> i=0
    >>> data = [ (i, { 'แมว',
    'กิน',
    'ปลาทู่',
    'หนู',
    'ขโมย',
    'แอบ',
    'กิน',
    'ปลาทู่ของแมว'
    })
    for i in range(3)
    ]
    >>> pprint.pprint(data) #ยังไม่กำหนดค่า indent
    [(0, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}),
    (1, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}),
    (2, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'})]
    >>> pp = pprint.PrettyPrinter(indent=4)
    >>> pp.pprint(data)
    [ (0, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}),
    (1, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'}),
    (2, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'})]
    [/python]

    จะเห็นได้ว่ามีการกำหนดการย่อหน้าให้กับข้อมูล

  • ค่า width คือ การกำหนดค่าความกว้างให้กับข้อมูล ตัวอย่างเข่น

    [python]
    >>> pp = pprint.PrettyPrinter(width=41)
    >>>> pp.pprint(data)
    [(0,
    {'กิน',
    'ขโมย',
    'ปลาทู่',
    'ปลาทู่ของแมว',
    'หนู',
    'แมว',
    'แอบ'}),
    (1,
    {'กิน',
    'ขโมย',
    'ปลาทู่',
    'ปลาทู่ของแมว',
    'หนู',
    'แมว',
    'แอบ'}),
    (2,
    {'กิน',
    'ขโมย',
    'ปลาทู่',
    'ปลาทู่ของแมว',
    'หนู',
    'แมว',
    'แอบ'})]
    [/python]

    จะเห็นได้ว่า การกำหนดค่า width จะช่วยให้ข้อมูลมีระบบระเบียบมากขึ้นเพราะได้กำหนดค่าความกว้างให้กับข้อมูลไว้แล้ว

  • ค่า depth เป็นค่าสำหรับความลึกของข้อมูล ตัวอย่างเช่น

    [python]
    >>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',('parrot', ('fresh fruit',))))))))
    >>> pp = pprint.PrettyPrinter(depth=6) #กำหนดความลึกของข้อมูลไว้ที่ 6
    >>> pp.pprint(tup)
    ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))
    [/python]

    จะเห็นได้ว่า ข้อมูลที่อยู่ลึกกว่าที่กำหนดในวงเล็บจะถูกยุบเป็น ... ครับ


รายละเอียดเพิ่มเติมอ่านได้ที่ https://docs.python.org/3/library/pprint.html
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)