16 มกราคม 2558

Published มกราคม 16, 2558 by with 0 comment

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

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

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


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


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

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


import pprint


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


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


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


pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *)



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


    >>> 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, {'ขโมย', 'แอบ', 'ปลาทู่', 'แมว', 'กิน', 'ปลาทู่ของแมว', 'หนู'})]


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

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


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


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

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


    >>> 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', (...)))))))


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

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

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

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

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