5 วิธี ในการแสดงรายการ Files ใน Directory ของ Python

16-พ.ย.-22

คัมภีร์เทพ IT

การดำเนินการที่เกี่ยวข้องกับ Files และ Directory เป็นทักษะพื้นฐานสำหรับ Software Engineers ซึ่งเราไม่ได้กล่าวถึงแค่การ Copy File ไปยัง Folder อื่นใน Windows File Explorer ของคุณเท่านั้น แต่เรากล่าวถึงการ Operations แบบอัตโนมัติทีละจำนวนมาก ๆ โดยใช้ Functions บน Software ของคุณ และนี่ก็คือ 5 วิธี ในการแสดงรายการ Files ใน Directory ของ Python

1. ใช้ os.listdir()

os.listdir() Method ซึ่งมาจาก OS Module ของ Python นับเป็นหนึ่งใน 5 ตัวเลือก ของบทความนี้:

จาก Code ด้านบน จะเป็นการ Print ชื่อ Files และ Directories ทั้งหมดที่อยู่ภายใต้ Path ปัจจุบัน หากคุณต้องการ Print ผลลัพธ์ของ Path อื่น เพียงแค่ใส่ Argument ลงใน os.listdir() Function:

หากคุณเพียงต้องการ Print Files ทั้งหมด คุณสามารถใช้ os.path.isfile() เพื่อให้มันช่วยเหลือคุณในเรื่องนี้:

แต่ถ้าคุณต้องการ Print Directories ก็ยังมี Function ที่ชื่อ os.path.isdir() ให้คุณได้ใช้:

จะเห็นว่ามันทั้งเรียบง่ายและมีประโยชน์ แต่…จะเกิดอะไรขึ้นถ้ารายการที่ถูก Return กลับมามีขนาดใหญ่มาก? แล้วถ้าคุณต้องการแค่ File บางประเภทเท่านั้นล่ะ?

แน่นอนคุณไม่ต้องกังวลเลย เพราะ Python ยังมีตัวเลือกอื่น ๆ อีกมากมายสำหรับสถานการณ์ที่ซับซ้อนเช่นนี้

2. ใช้ os.walk()

ยังมี Module อื่นของ OS Module อีก นั่นคือ walk() นั่นเอง

ตามชื่อของมันเลย มันสามารถ "Walk" ผ่าน Directory Tree ทีละ Layer ได้ เมื่อคุณเรียกใช้ os.walk() Method มันจะทำการ Return ตัว Generator ทุกครั้งที่คุณเรียกใช้ next() Method เพื่อ Generate ค่าถัดไป มันจะลึกลงไปอีกหนึ่ง Layer และผลลัพธ์จะเป็น Tuple ซึ่งประกอบด้วย 3 รายการคือ dirpath, dirnames และ filename)

ตัวอย่างเช่น หากคุณต้องการทราบชื่อ Folders ทั้งหมดใน Layer ที่ 2 ตัวอย่าง Code จะเป็นตามด้านล่างนี้:

3. ใช้ Glob Module เพื่อค้นหาด้วย Regular Expressions

แทนที่จะได้ชื่อ Files มาทั้งหมด บางครั้งเราต้องการทราบแค่ชื่อ File แต่เจาะจงเฉพาะแค่บาง Types เท่านั้น เนื่องจาก glob Module สามารถเพิ่ม Regular Expressions สำหรับการค้นหาได้ มันจึงเป็นเพื่อนที่ดีของคุณสำหรับการ Operation ในลักษณะนี้:

จะเห็นว่า Code ด้านบน จะทำการแสดงชื่อ File ที่ลงท้ายด้วยนามสกุล ".log"

4. ใช้ pathlib Module (From Python 3.4+)

ตั้งแต่ Python 3.4 เป็นต้นไป มี Module ที่เรียกว่า pathlib ซึ่งมันมีประโยชน์มากเช่นกัน

ด้วยความช่วยเหลือของการใช้ความสามารถของ List Comprehension เราสามารถใช้ Code เพียงบรรทัดเดียวเพื่อ Generate ชื่อ Files ทั้งหมดใน Path ปัจจุบันได้:

น่าทึ่งที่ Path() มาพร้อมกับ glob() Function ด้วยเช่นกัน (คุณจึงไม่จำเป็นต้อง Import glob Module เพิ่มเข้ามาแต่อย่างใด)

5. ใช้ os.scandir() Function (From Python 3.5+)

จะเห็นว่า os.listdir() Function นั้นใช้งานง่าย แต่มันอาจมีประสิทธิภาพที่ยังไม่เพียงพอสำหรับ Directories ขนาดใหญ่ที่เต็มไปด้วย Files ขนาดใหญ่ ๆ ดังนั้น Python 3.5 จึงได้แนะนำ Function ใหม่ที่คล้ายกัน นั่นก็คือ os.scandir()

คุณอาจเดาได้ว่ามันทำอะไร โดย Function นี้จะทำการ Return Generator แทนที่จะเป็นรายชื่อทั้งหมด และคุณสามารถรับชื่อของพวกมันได้ตามต้องการ แต่มันจะมีประสิทธิภาพมากกว่าในบางกรณีที่คุณไม่ได้ต้องการชื่อของพวกมันมาทั้งหมดในคราวเดียว

ที่มา: https://medium.com/techtofreedom/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด