วิธีดึงชื่อไฟล์ใน Python อย่างมีประสิทธิภาพด้วย os และ pathlib

1. บทนำ

Python มีความยืดหยุ่นมากในการจัดการไฟล์ และสามารถทำให้งานจำนวนมากเป็นอัตโนมัติได้ด้วยโค้ดที่เรียบง่าย ในบทความนี้ เราจะแนะนำวิธี “ดึงชื่อไฟล์” ด้วย Python หลายวิธี โดยเฉพาะจะอธิบายโดยเน้นที่โมดูลมาตรฐาน os และ pathlib การอ่านบทความนี้จะช่วยให้คุณจัดการไฟล์ภายในไดเรกทอรีได้อย่างมีประสิทธิภาพ และสร้างสคริปต์สำหรับการดึงชื่อไฟล์และการกรองได้

2. พื้นฐานวิธีการดึงชื่อไฟล์ใน Python

ก่อนอื่น เราจะเริ่มจากวิธีพื้นฐานในการดึงชื่อไฟล์ด้วย Python การใช้ฟังก์ชัน os.path.basename() จะช่วยให้คุณดึงชื่อไฟล์จากพาธที่กำหนดได้。

2.1 วิธีใช้ os.path.basename()

os.path.basename() เป็นฟังก์ชันที่ดึงเฉพาะชื่อไฟล์จากพาธแบบเต็ม ตัวอย่างด้านล่างจะแยกชื่อไฟล์ออกมาจากพาธของไฟล์
import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # 結果: "file.txt"

2.2 ดึงชื่อไดเรกทอรีด้วย os.path.dirname()

ในทำนองเดียวกัน หากใช้ os.path.dirname() คุณสามารถดึงชื่อไดเรกทอรีจากพาธของไฟล์ได้ ซึ่งทำให้สามารถแยกดึงชื่อไฟล์และชื่อไดเรกทอรีออกจากกันได้
dir_name = os.path.dirname(file_path)
print(dir_name)  # 結果: "/user/home/document"
年収訴求

3. ดึงชื่อไฟล์ทั้งหมดภายในไดเรกทอรี

ในการดึงไฟล์และโฟลเดอร์ทั้งหมดที่อยู่ภายในไดเรกทอรีในรูปแบบลิสต์ os.listdir() สะดวกมาก นอกจากนี้ หากต้องการดึงไฟล์ภายในซับไดเรกทอรีแบบเรียกซ้ำ (recursive) os.walk() ก็มีประโยชน์เช่นกัน。

3.1 การดึงชื่อไฟล์ด้วย os.listdir()

โดยใช้ os.listdir() คุณสามารถดึงรายชื่อไฟล์และโฟลเดอร์ทั้งหมดภายในไดเรกทอรีที่ระบุออกมาเป็นลิสต์ได้ เหมาะสำหรับงานจัดการไดเรกทอรีแบบง่ายๆ
import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # ผลลัพธ์: ["file1.txt", "file2.txt", "subfolder"]

3.2 ดึงชื่อไฟล์แบบเรียกซ้ำ (recursive) ด้วย os.walk()

หากต้องการดึงไฟล์แบบเรียกซ้ำรวมถึงซับไดเรกทอรีด้วย การใช้ os.walk() จะมีประสิทธิภาพที่สุด โค้ดด้านล่างจะแสดงรายการไฟล์ทั้งหมดที่อยู่ในไดเรกทอรีที่ระบุและซับไดเรกทอรีของมัน
import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3.3 การเพิ่มการจัดการข้อผิดพลาด

หากไดเรกทอรีไม่มีอยู่จริงหรือไม่มีสิทธิ์เข้าถึง อาจเกิดข้อผิดพลาดได้ ดังนั้น แนะนำให้เพิ่มการจัดการข้อยกเว้นด้วย try-except
dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"ไม่พบ {dir_path}.")

4. การดึงและการเปลี่ยนนามสกุลไฟล์

เมื่อดึงชื่อไฟล์ อาจจำเป็นต้องจัดการกับนามสกุลไฟล์ด้วย os.path.splitext() ช่วยให้สามารถแยกนามสกุลออกจากชื่อไฟล์หรือเปลี่ยนนามสกุลได้

4.1 os.path.splitext()เพื่อดึงนามสกุลไฟล์

os.path.splitext() เป็นฟังก์ชันที่คืนค่าชื่อไฟล์และนามสกุลไฟล์แยกจากกัน
import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # ผลลัพธ์: "/user/home/document/file"
print(file_ext)   # ผลลัพธ์: ".txt"

4.2 เปลี่ยนนามสกุลไฟล์

เมื่อต้องการเปลี่ยนนามสกุลไฟล์ ให้เพิ่มนามสกุลใหม่ต่อท้ายชื่อไฟล์ที่ได้จาก os.path.splitext()
new_file_path = file_name + ".jpg"
print(new_file_path)  # ผลลัพธ์: "/user/home/document/file.jpg"

5. pathlib โมดูลสำหรับการประยุกต์ใช้การดึงชื่อไฟล์

ตั้งแต่ Python 3.4 เป็นต้นมา pathlib โมดูลมีประโยชน์มากสำหรับการจัดการพาธไฟล์ pathlib สามารถจัดการพาธไฟล์แบบเชิงวัตถุ ทำให้ใช้งานได้อย่างเข้าใจง่ายยิ่งขึ้น。

5.1 Path.iterdir() สำหรับการดึงชื่อไฟล์

เมื่อใช้ pathlib.Path() ร่วมกับเมธอด iterdir() คุณสามารถดึงชื่อไฟล์และชื่อโฟลเดอร์ภายในไดเรกทอรีที่ระบุได้。
from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 การดึงไฟล์แบบเรียกซ้ำ: rglob()

หากต้องการดึงชื่อไฟล์แบบเรียกซ้ำรวมถึงซับไดเรกทอรี ให้ใช้เมธอด rglob() วิธีนี้ยังสามารถใช้เป็นทางเลือกแทน os.walk() ได้。
for file in dir_path.rglob("*"):
    print(file)

6. การกรองชื่อไฟล์

หากต้องการดึงเฉพาะชื่อไฟล์ที่ตรงตามเงื่อนไขที่กำหนด สามารถกรองได้ด้วยการใช้โมดูล glob หรือเมธอด glob() ของ pathlib

6.1 การกรองตามนามสกุลไฟล์

หากต้องการดึงเฉพาะไฟล์ที่มีนามสกุลที่ระบุ ให้ใช้ไวลด์การ์ด *
from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)
โค้ดนี้จะดึงเฉพาะไฟล์ .txt ภายในไดเรกทอรีที่ระบุ

7. สรุป

มีวิธีการมากมายในการดึงชื่อไฟล์ด้วย Python แต่สิ่งสำคัญคือการเลือกวิธีที่เหมาะสมตามวัตถุประสงค์การใช้งาน หากใช้ตั้งแต่การทำงานพื้นฐานของโมดูล os ไปจนถึงความสามารถขั้นสูงของ pathlib ก็จะสามารถจัดการไฟล์ภายในไดเรกทอรีได้อย่างมีประสิทธิภาพ ครั้งถัดไป เราจะให้ข้อมูลเกี่ยวกับการเปลี่ยนชื่อไฟล์ การย้าย และการลบ ซึ่งเป็นการประยุกต์ใช้การจัดการไฟล์
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール