Powered by Drupal, an open source content management system

โฆษณาโดย Google

ลิสต์ไฟล์ใน ไดเรกทอรี่ ด้วย ไพธอน

หลังจากช่วงปิดเทอม ได้ใช้งาน python กับงานงานนึง ซึ่งตอนนั้นจะหาว่าทำยังไงจะลิสต์รายชื่อไฟล์ .tif ออกมาจาก directory ได้ ก็เลยมาสรุปว่า ใน python มีวิธีอะไรบ้างถ้าเราอยากจะลิสต์รายชื่อไฟล์ หรือ sub directory ออกมาจากจาก directory หนึ่งๆ

ใช้ คำสั่ง os.listdir(path)

วิธีนี้จะใช้คำสั่ง listdir จาก mudule os คำสั่งนี้จะลิสต์รายชื่อไฟล์ และ ไดเร็กทอรี่ทั้งหมดที่อยู่ใน path ที่ส่งไปเป็นพารามิเตอร์ ตัวอย่างเช่น


>>> os.listdir("/home/iporsut/src/gwt-2.1.0.M3")
['gwt-benchmark-viewer.war', 'benchmarkViewer', 'COPYING.html', 'release_notes.html', 'gwt-user.jar', 'webAppCreator.cmd', 'COPYING', 'gwt-ll.dll', 'gwt-api-checker.jar', 'webAppCreator', 'gwt-soyc-vis.jar', 'gwt-servlet.jar', 'i18nCreator', 'i18nCreator.cmd', 'about.txt', 'samples', 'about.html', 'doc', 'gwt-module.dtd', 'gwt-dev.jar', 'benchmarkViewer.cmd']

ซึ่ง os.listdir ลิสต์ทุกอย่างที่อยู่ใน path ที่กำหนด และไม่ลิสต์ลงไปใน sub directory

ใช้คำสั่ง glob.glob(pathname)

วิธีนี้ต่างจาก os.listdir ตรงที่ pathname เราสามารถใช้เป็น pattern แบบเวลาเราใช้คำสั่ง ls หรือ dir ในวินโดว์ได้ คือใช้ * แทนอะไรก็ได้ ใช้ ? แทนตัวอักษรอะไรก็ได้ในตำแหน่งนั้น และใช้ [] กำหนดช่วงของตัวอักษรที่เป็นไปได้ ตัวอย่างเช่น


>>> import glob
>>> glob.glob("/home/iporsut/src/gwt-2.1.0.M3/*.jar")
['/home/iporsut/src/gwt-2.1.0.M3/gwt-user.jar', '/home/iporsut/src/gwt-2.1.0.M3/gwt-api-checker.jar', '/home/iporsut/src/gwt-2.1.0.M3/gwt-soyc-vis.jar', '/home/iporsut/src/gwt-2.1.0.M3/gwt-servlet.jar', '/home/iporsut/src/gwt-2.1.0.M3/gwt-dev.jar']

ผลลัพธ์ที่ได้ต่างกับ os.lisdir อีกอย่างคือ glob จะลิสต์พาธเต็มของไฟล์ที่เจอออกมาด้วย

ใช้คำสั่ง os.walk(top)

วิธีนี้จะลิสต์ทุกๆไฟล์และไดเร็กทอรี่ที่อยู่ในพาธ top ที่กำหนด และยังลิสต์ลงไปในไดเรกทอรี่ย่อยๆทุกไดเรกทอรี่ด้วย วิธีใช้จะต่างจากสองแบบแรก เวลาใช้ walk เราจะใช้ for loop เพื่อที่จะวนเข้าไปในไดเร็กทอรี่ย่อยต่างๆ ตัวอย่างเช่น


import os
for dirname, dirnames, filenames in os.walk('.'):
for subdirname in dirnames:
print os.path.join(dirname, subdirname)
for filename in filenames:
print os.path.join(dirname, filename)

ในการวนลูปแต่ละครั้ง os.walk จะได้ค่ามา 3 ค่าคือ dirname เป็น string ที่เก็บ path ปัจจุบันที่กำลังลิสต์ไฟล์และไดเร็กทอรี่อยู่ ส่วน dirnames เป็น list ของ sub directory ที่อยู่ใน dirname และ filenames เป็น list ของ files ที่อยู่ใน dirname

ไม่เคยใช้ glob กะ walk แฮะ

ไม่เคยใช้ glob กะ walk แฮะ ความรู้ใหม่ๆ :)