Dedent your multiline string
วันที่ 2 ของ #PythonTricksEveryday นะครับ ไหนๆ ก็เป็นวันสุดท้ายของการทำงานก่อนจะถึงวันหยุดยาว ขอแนะนำด้วย Tricks เล็กๆ ที่จะช่วยให้การทำงานกับ Multiline String เราดีขึ้นครับ
สมมติว่าเรามี String ยาวๆ ที่ต้องมี Indent สวยๆ เช่น Email หรือ Code snippet อย่างในภาพ แล้วเราต้องการนำมันไปใช้งานเช่นส่งอีเมล์หรือ Print report อะไรแบบนี้
สิ่งที่เกิดขึ้นคือ Multiline String ของ Python จะนับ tab ที่เราเว้นไว้ทางซ้ายด้วย เหมือนในฟังก์ชั่น process_something() ซึ่งถ้าเราไม่อยากให้มันเยื้องแล้ว Print ออกมาสวยๆ เราก็ต้องทิ้งเยื้องไป เหมือนในฟังก์ชั่น process_something_without_padding() ซึ่งพอเราทำแบบนี้ ผมว่าทุกคนน่าจะรู้สึกทันทีว่า เออมันเวิร์คนะแต่ Indent มั่วไปหมดเลย พ้น definition ของ function ไปอีก ยิ่งถ้าเป็น Method ที่อยู่ใน class ยิ่งไม่อยากจะคิดเลย
ทีนี้ถ้าเรายังอยากเก็บ Multiline String โดยที่ยังรักษา indent ของ function เราให้เป็นไปในทางเดียวกันอยู่ เราก็มีตัวเลือกหลายทางครับเช่น เอาไปเก็บแยกเป็นตัวแปรไว้ข้างนอก function ไปเลย หรือโหลดจากไฟล์อื่นเข้ามาอ่านก็ได้ แต่ผมคิดว่าการทำแบบนั้นมันเป็นแค่การเลี่ยงปัญหา ไม่ใช่การแก้ปัญหาจริงๆ
Python มีวิธีในการแก้ปัญหาเรื่องนี้ครับ โดยใน standard library ที่ติดตัวมากับภาษามี Library ตัวนึงที่ชื่อว่า textwrap เอาไว้ทำงานเกี่ยวกับเรื่องแนวนี้ ซึ่งสิ่งที่เราต้องการก็คือ method ที่ชื่อว่า dedent ครับ เมื่อเราครอบ Multiline String ด้วย textwrap.dedent() เนี่ย สิ่งที่มันทำก็คือ มันจะลบ Leading space ออกจาก string ของเราทุกบรรทัดครับ ซึ่งทำให้เรากลับมาเขียน Multiline String สวยๆ ได้แบบฟังก์ชั่น process_something_with_dedent() เลยครับ
จริงๆ textwrap library นี่ยังทำอะไรได้อีกหลายอย่างเลยนะครับ สนใจก็คลิกไปอ่าน Official document ได้ที่นี่เลยครับ
Original post at: https://yothinix.medium.com/dedent-your-multiline-string-b7fc8f41b286