รูปแบบไวด์การ์ดที่ใช้ในบรรทัดคำสั่งเชลล์ Unix แตกต่างจากไวยากรณ์นิพจน์ทั่วไป ในไลบรารีมาตรฐานของ Python โมดูล fnmatch จัดเตรียมรูปแบบไวด์การ์ด Unix
ฟังก์ชันต่อไปนี้ถูกกำหนดไว้ในโมดูล fnmatch
fnmatch()
ฟังก์ชันนี้ต้องการพารามิเตอร์สองตัว – ชื่อไฟล์และรูปแบบสตริงของอักขระ ชื่อไฟล์ตรงกับรูปแบบที่กำหนดและฟังก์ชันจะคืนค่าเป็น True หรือ False
ตัวอย่างต่อไปนี้แสดงรายการไฟล์ทั้งหมดที่ตรงกับรูปแบบ “*.py” จากไดเร็กทอรีปัจจุบัน
>>> import glob,fnmatch >>> for files in (glob.glob('*.*')): if (fnmatch.fnmatch(files, "*.py")): print (files)
fnmatchcase()
ฟังก์ชันนี้คล้ายกับ fnmatch() อย่างไรก็ตาม ฟังก์ชันนี้จะทำการจับคู่ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่กับชื่อไฟล์
ในตัวอย่างต่อไปนี้ ไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วย 'l' และ '.py' จะถูกรวบรวมก่อนในอ็อบเจกต์รายการไฟล์ ฟังก์ชัน fnmatch() ใช้สำหรับพิมพ์เฉพาะชื่อที่ขึ้นต้นด้วยอักขระ 'lo' เท่านั้น
>>> files=glob.glob("l*.*") >>> files ['LICENSE.txt', 'lines.txt', 'listwidget.ui', 'lo1.ui', 'lo2.ui', 'lo3.ui', 'logo.png', 'logo.svg', 'lw.ui'] >>> for file in files: if fnmatch.fnmatchcase(file,"lo*.*")==True: print (file) lo1.ui lo2.ui lo3.ui logo.png logo.svg
ตัวกรอง()
ฟังก์ชันนี้ส่งคืนเฉพาะไฟล์ที่มีชื่อตรงกับพารามิเตอร์รูปแบบที่กำหนด
คำสั่งต่อไปนี้จะส่งคืนรายการไฟล์ที่มีนามสกุล '.txt' จากไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบัน
>>> fnmatch.filter(files,"*.txt") ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt', 'zen.txt', 'zen1.txt', 'zenbak.txt']
แปล()
ฟังก์ชันนี้มีประโยชน์ในการแปลงรูปแบบสไตล์ UNIX เป็นรูปแบบ RegEx ที่สอดคล้องกัน ค่าส่งคืนของฟังก์ชัน translate() ควรแปลงเป็นนิพจน์ทั่วไปโดยใช้ฟังก์ชัน compile() ของ re module จากนั้นจะใช้เพื่อจับคู่รูปแบบ
>>> pattern="*.txt" >>> import re >>> reg=fnmatch.translate(pattern) >>> reg '(?s:.*\\.txt)\\Z' >>> rec=re.compile(reg) >>> for file in glob.glob("*.*"): if re.match(rec,file): print (file)
ในบทความนี้มีการอธิบายฟังก์ชันในโมดูล fnmatch