ไลบรารี Python os ใช้สำหรับแสดงรายการไฟล์ในไดเรกทอรี เมธอด Python os.listdir() คืนค่ารายการของทุกไฟล์และโฟลเดอร์ในไดเรกทอรี ฟังก์ชัน os.walk() คืนค่ารายการของทุกไฟล์ในต้นไม้ไฟล์ทั้งหมด
บ่อยครั้งที่เมื่อคุณทำงานกับไฟล์ใน Python คุณจะพบสถานการณ์ที่คุณต้องการแสดงรายการไฟล์ในไดเรกทอรี ตัวอย่างเช่น คุณอาจต้องการหาไฟล์ Python ทั้งหมดในโฟลเดอร์
ไลบรารี Python os เสนอเมธอดหลายอย่างที่สามารถใช้แสดงรายการไฟล์ในไดเรกทอรี บทช่วยสอนนี้จะอภิปรายวิธีใช้ os.listdir() เพื่อรับไฟล์และโฟลเดอร์ในไดเรกทอรี เราจะพูดถึงการใช้ os.walk() เพื่อรับไฟล์และโฟลเดอร์ในไดเรกทอรี และ ในไดเรกทอรีย่อย (subdirectories) ของมัน
ไลบรารี Python os (Python os Library)
ไลบรารี Python os 提供หลายฟังก์ชันที่คุณสามารถใช้ทำงานกับระบบปฏิบัติการ ฟังก์ชันที่รวมอยู่ในโมดูล os ทำงานบนระบบปฏิบัติการสมัยใหม่ใดๆ ไม่ว่าจะเป็น Windows, Linux หรือ Mac
เนื่องจาก os เป็นไลบรารีภายนอก เราจำเป็นต้องนำเข้าเข้าโค้ดของเราก่อนที่เราจะเริ่มใช้งาน เราสามารถทำได้โดยใช้คำสั่ง import ของ Python:
import os
ตอนนี้เราได้นำเข้าไลบรารี os เข้าสู่โค้ดของเราแล้ว เราสามารถเริ่มใช้ฟังก์ชันของมันเพื่อแสดงรายการรายการในไดเรกทอรีได้
Python os.listdir()
ใน Python เมธอด os.listdir() แสดงรายการไฟล์และโฟลเดอร์ในไดเรกทอรีที่กำหนด เมธอดนี้ไม่คืนค่ารายการพิเศษเช่น '.' และ '..' ซึ่งระบบปฏิบัติการใช้เพื่อนำทางผ่านไดเรกทอรีต่างๆ
os.listdir() ยังไม่คืนค่าไฟล์และโฟลเดอร์เกินระดับแรกของโฟลเดอร์ กล่าวคือ os.listdir() ไม่คืนค่าอะไรภายในโฟลเดอร์ย่อยที่ถูกค้นพบโดยเมธอด
ฟังก์ชัน os.listdir() รับพารามิเตอร์หนึ่ง: เส้นทางไฟล์ของไดเรกทอรีที่คุณต้องการดึงชื่อไฟล์และโฟลเดอร์ นี่คือไวยากรณ์สำหรับเมธอด listdir:
os.listdir(path)
มาเดินทางผ่านตัวอย่างเพื่อแสดงวิธีใช้เมธอดนี้ในโปรแกรม Python
ตัวอย่าง os.listdir() ใน Python
สมมติว่าเรากำลังสร้างโปรแกรมที่วิเคราะห์ผลการดำเนินงานของหุ้น Netflix ตลอดทศวรรษที่ผ่านมา เรามีโฟลเดอร์ (ชื่อ: /home/data_analysis/netflix) ที่มีข้อมูลดิบทั้งหมดของเรา และก่อนที่โปรแกรมของเราจะเริ่มรัน เราต้องการตรวจสอบให้แน่ใจว่าไฟล์ raw_data_2019.csv มีอยู่ภายในโฟลเดอร์นั้น
เพื่อทำงานได้อย่างถูกต้อง โปรแกรมของเราต้องการไฟล์เฉพาะนั้นจัดเก็บในโฟลเดอร์เฉพาะนั้น
เราสามารถใช้โค้ดต่อไปนี้เพื่อดึงรายการไฟล์ในไดเรกทอรีทำงาน /home/data_analysis/netflix:
import os
path = '/home/data_analysis/netflix'
files = os.listdir(path)
for f in files:
print(f)
โปรแกรมของเราดึงรายการของไฟล์และโฟลเดอร์ทั้งหมดในไดเรกทอรีที่ระบุและคืนค่าดังนี้:
README.md app.py raw_data_2016.csv raw_data_2017.csv raw_data_2018.csv raw_data_2019.csv processed_data
ตอนนี้ เราสามารถตรวจสอบได้ว่าไฟล์ raw_data_2019.csv อยู่ในโฟลเดอร์หรือไม่ ตามที่คุณเห็น มันอยู่
มาแยกวิเคราะห์โค้ดของเรา ในบรรทัดแรก เรานำเข้าโมดูล os ซึ่งเราต้องทำเพื่อเข้าถึงฟังก์ชัน os.listdir() จากนั้น เราประกาศตัวแปร Python ชื่อ path ซึ่งจัดเก็บชื่อของเส้นทางที่เราต้องการดึงเนื้อหา
ในบรรทัดถัดไป เราใช้เมธอด os.listdir() เพื่อรับรายการไฟล์และโฟลเดอร์ในไดเรกทอรี /home/data_analysis/netflix สุดท้าย เราสร้างลูป for ของ Python ลูปนี้วนซ้ำผ่านทุกรายการในรายการที่ผลิตโดย os.listdir() เราพิมพ์ชื่อของแต่ละไฟล์ไปที่คอนโซลโดยใช้คำสั่ง print() ของ Python
ไดเรกทอรี /home/data_analysis/netflix มีไฟล์หกไฟล์และหนึ่งไดเรกทอรี ไดเรกทอรีเรียกว่า processed_data และแตกต่างจากไฟล์อื่นๆ เนื่องจากไม่มีนามสกุล
Python os.walk()
ฟังก์ชัน os.walk() ดึงรายการไฟล์ที่อยู่ภายในต้นไม้ เมธอดนี้วนซ้ำผ่านแต่ละไดเรกทอรีในต้นไม้ จากนั้น os.walk() คืนค่าชื่อของทุกไฟล์และโฟลเดอร์ภายในไดเรกทอรี และ ไดเรกทอรีย่อยของมัน
ไวยากรณ์สำหรับเมธอด os.walk() มีดังนี้:
os.walk(top, topdown, onerror, followlinks)
เมธอด os.walk() ยอมรับสี่พารามิเตอร์:
- top คือไดเรกทอรีบนสุดที่คุณต้องการดึงชื่อไฟล์และโฟลเดอร์องค์ประกอบ (จำเป็น)
- topdown เมื่อตั้งค่าเป็น True ระบุว่าไดเรกทอรีควรสแกนจากบนลงล่าง หากค่านี้ตั้งเป็น False ไดเรกทอรีจะถูกสแกนจากล่างขึ้นบน (ทางเลือก)
- onerror ให้ตัวจัดการข้อผิดพลาดหากพบข้อผิดพลาด (ทางเลือก)
- followlinks หากตั้งค่าเป็น True จะเยี่ยมชมโฟลเดอร์ที่อ้างอิงโดยลิงก์ระบบ (ทางเลือก)
เราจะเน้นที่พารามิเตอร์สองตัวแรก เนื่องจาก onerror และ followlinks เป็นขั้นสูงกว่าและไม่ค่อยใช้บ่อยนัก
ตัวอย่าง os.walk() ใน Python
สมมติว่าเราต้องการดึงชื่อของไฟล์ทั้งหมดในไดเรกทอรี /home/data_analysis/netflix เรายังต้องการทราบว่ามีอะไรอยู่ภายในโฟลเดอร์ย่อยทั้งหมดในโฟลเดอร์นั้น
เหมือนที่เราอภิปรายข้างต้น ไดเรกทอรี netflix มีโฟลเดอร์หนึ่ง: processed_data เราสามารถใช้โค้ดต่อไปนี้เพื่อดึงชื่อไฟล์ทั้งหมดในไดเรกทอรี /home/data_analysis/netflix และ ไดเรกทอรีย่อยของมัน:
import os
path = '/home/data_analysis/netflix'
for root, directories, files in os.walk(path, topdown=False):
for name in files:
print(os.path.join(root, name))
for name in directories:
print(os.path.join(root, name))
นี่คือเอาต์พุตจากโค้ดของเรา:
/home/data_analysis/netflix/README.md /home/data_analysis/netflix/app.py /home/data_analysis/netflix/raw_data_2016.csv /home/data_analysis/netflix/raw_data_2017.csv /home/data_analysis/netflix/raw_data_2018.csv /home/data_analysis/netflix/raw_data_2019.csv /home/data_analysis/netflix/processed_data /home/data_analysis/netflix/processed_data/final.csv
เรานำเข้าโมดูล os ซึ่งเราอ้างอิงเมธอด os.walk() และ os.path.join() ต่อมาในโค้ดของเรา จากนั้น เราประกาศตัวแปรชื่อ path ซึ่งจัดเก็บเส้นทางที่เราต้องการค้นหาชื่อไฟล์
เราจึงสร้างลูป for ที่ใช้ os.walk() เพื่อดึงรายการของไฟล์และโฟลเดอร์ทั้งหมดในไดเรกทอรี path ลูปนั้นวนซ้ำผ่านไฟล์และโฟลเดอร์ที่ os.walk() คืนค่า เหคือควรสังเกตว่าเราระบุพารามิเตอร์ topdown=False ในเมธอด os.walk() ซึ่งบอกโค้ดของเราให้ทำการค้นหาแบบ top-down
ลูป for ของเราวนซ้ำผ่านแต่ละไฟล์และไดเรกทอรีที่ถูกค้นพบโดยเมธอด os.walk() โดยใช้ลูป for เพิ่มเติม เราพิมพ์ไฟล์ใน os.walk() ไปที่คอนโซล
ในโค้ดของเราข้างต้น นี่คือลูป for ของเรา:
for root, directories, files in os.walk(path):
for name in files:
print(os.path.join(root, name))
for name in directories:
print(os.path.join(root, name))
จากนั้น โปรแกรมของเราใช้ os.path.join() เพื่อรวมโฟลเดอร์รากของแต่ละไฟล์ (i.e. /home/data_analysis/netflix)และชื่อของไฟล์ (i.e. raw_datra_2019.csv) โฟลเดอร์รากหมายถึงเส้นทางไดเรกทอรีที่ไฟล์มีอยู่
สรุป
คุณสามารถใช้เมธอด listdir() ของ Python เพื่อทำเช่นนี้ คุณยังสามารถใช้เมธอด walk() ซึ่งแสดงรายการทุกอย่างในไดเรกทอรี รวมถึง อะไรก็ตามภายในไดเรกทอรีย่อย
คู่มือนี้สำรวจ พร้อมตัวอย่าง วิธีใช้เมธอด os.listdir() และ os.walk() เพื่อแสดงรายการไฟล์และโฟลเดอร์ในไดเรกทอรีใน Python ตอนนี้คุณมีทักษะที่จำเป็นในการแสดงรายการไฟล์ในไดเรกทอรีใน Python อย่างมืออาชีพแล้ว!
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโค้ดใน Python โปรดอ่านคู่มือเต็ม How to Learn Python ของเรา