ในการรับรายชื่อไฟล์และชื่อไดเร็กทอรี (ชื่อโฟลเดอร์) ใน Python ให้ใช้ฟังก์ชัน os module os.listdir()
os.listdir(path=’.’)
ส่งคืนรายการที่มีชื่อรายการในไดเร็กทอรีที่ระบุโดยพาธ
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
โมดูลระบบปฏิบัติการรวมอยู่ในไลบรารีมาตรฐานและไม่จำเป็นต้องติดตั้ง อย่างไรก็ตาม จำเป็นต้อง “นำเข้า”
ข้อมูลต่อไปนี้มีให้ที่นี่
- รับรายชื่อทั้งชื่อไฟล์และไดเร็กทอรี
- รับรายชื่อไฟล์เท่านั้น
- รับรายชื่อไดเร็กทอรีเท่านั้น
ต่อไปนี้เป็นตัวอย่างของโครงสร้างไฟล์ (ไดเร็กทอรี)
. └── testdir ├── dir1 ├── dir2 ├── file1 ├── file2.txt └── file3.jpg
นอกจาก os.listdir() แล้ว คุณยังสามารถใช้โมดูล glob เพื่อรับรายชื่อไฟล์และชื่อไดเร็กทอรี (ชื่อโฟลเดอร์) glob อนุญาตให้คุณระบุเงื่อนไขโดยใช้สัญลักษณ์แทน (*) ฯลฯ และรวมไดเรกทอรีย่อยแบบเรียกซ้ำ
ใน Python 3.4 และใหม่กว่า ยังสามารถรับรายการไฟล์และไดเร็กทอรีโดยใช้โมดูล pathlib ซึ่งสามารถจัดการพาธเป็นอ็อบเจ็กต์ได้ เช่นเดียวกับ globs ด้านบน สามารถใช้แบบมีเงื่อนไขและแบบเรียกซ้ำได้
รับรายชื่อทั้งชื่อไฟล์และไดเร็กทอรี
หากคุณใช้ os.listdir() ตามที่เป็นอยู่ มันจะส่งคืนรายการของทั้งชื่อไฟล์และไดเร็กทอรี
import os path = "./testdir" files = os.listdir(path) print(type(files)) # <class 'list'> print(files) # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']
สิ่งที่คุณได้รับคือรายการสตริงพาธ
รับรายชื่อไฟล์เท่านั้น
หากคุณต้องการรับรายชื่อไฟล์เท่านั้น ให้ใช้ฟังก์ชัน os.path.isfile() เพื่อตรวจสอบว่าพาธเป็นไฟล์หรือไม่ การส่งเฉพาะชื่อไฟล์เป็นอาร์กิวเมนต์ของฟังก์ชัน os.path.isfile() จะไม่ทำงาน ดังนั้นให้ส่งพาธแบบเต็มตามที่แสดงด้านล่างos.path.isfile(os.path.join(path, f))
files = os.listdir(path) files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] print(files_file) # ['file1', 'file2.txt', 'file3.jpg']
รับรายชื่อไดเร็กทอรีเท่านั้น
หากคุณต้องการรับรายชื่อไดเรกทอรีเท่านั้น ให้ใช้ os.path.isdir() ในลักษณะเดียวกัน
files = os.listdir(path) files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))] print(files_dir) # ['dir1', 'dir2']