目次
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
ก็จะสามารถจัดการไฟล์ภายในไดเรกทอรีได้อย่างมีประสิทธิภาพ ครั้งถัดไป เราจะให้ข้อมูลเกี่ยวกับการเปลี่ยนชื่อไฟล์ การย้าย และการลบ ซึ่งเป็นการประยุกต์ใช้การจัดการไฟล์