January 7, 2012

Python: ปรับปรุงข้อความในบรรทัดเดิม

ปรกติแล้ว คำสั่ง print จะทำการเก็บ string ที่จะพิมพ์ไว้ก่อน จนกว่าจะเจออักขระสำหรับขึ้นบรรทัดใหม่อย่าง \n หรือ \r มันถึงจะพิมพ์ข้อมูลเหล่านั้นออกมา

เราอาจประยุกต์ท่านี้มาใช้สร้าง progress bar/progress message ได้ง่ายๆ เช่น



แต่ถ้าต้องการพิมพ์ข้อมูลออกมาเรื่อยๆ ไม่อยากกลับไปเริ่มต้นจากด้านหน้าบรรทัดใหม่หมดตามตัวอย่างข้างบน ต้อง import ฟังก์ชัน flush จากโมดูล sys.stdout มาครับ



สุดท้าย ถ้าเราต้องการปรับค่าเล็กน้อยในบรรทัด แต่ไม่ต้องการลบทั้งบรรทัดเพื่อพิมพ์ใหม่หมด เราอาจใช้ \b เพื่อลบตัวอักษร (จริงๆ ก็ไม่ได้ลบ แต่เป็นการเลื่อน cursor ไปด้านซ้าย) ได้

ระวังอย่าเลื่อนกลับไปทางซ้ายด้วย \b เพลิน เพราะการจะเลื่อนกลับมาด้านขวาไม่มีอักขระแบบ \b ให้ใช้ ต้องพิมพ์ซ้ำตัวอักษรทับลงไปในตำแหน่งนั้นๆ ครับ

2 comments:

  1. ตรง print('{:3}'.format(),end='')

    ต้องเป็น print('{:3}'.format(i),end='')

    ครับ รู้สึกว่าจะตรงตัว i ไปครับ

    ReplyDelete
  2. อ่า พิมพ์ตกจริงๆ ด้วยครับ ขอบคุณครับ

    ReplyDelete