หลายครั้งที่โปรแกรมจำเป็นต้องทำซ้ำผ่านรายการไฟล์ในระบบไฟล์ ซึ่งมักจะมีชื่อที่ตรงกับรูปแบบ โมดูล glob มีประโยชน์ในการสร้าง lit ของไฟล์ในไดเร็กทอรีเฉพาะ มีนามสกุล หรือมีสตริงที่เป็นส่วนหนึ่งของชื่อไฟล์
กลไกการจับคู่รูปแบบที่ใช้โดยฟังก์ชันโมดูล glob เป็นไปตามกฎการขยายพาธ UNIX โมดูลนี้ไม่ขยายตัวหนอน (~) และตัวแปรเชลล์
ส่วนใหญ่มีสามฟังก์ชั่นในโมดูล glob
glob()
ฟังก์ชันนี้จะส่งคืนรายการไฟล์ที่ตรงกับรูปแบบที่กำหนดในพารามิเตอร์ชื่อพาธ ชื่อพาธสามารถเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ สามารถสโลว์รวมไวด์การ์ดเช่น * และ ?.
พารามิเตอร์แบบเรียกซ้ำของฟังก์ชันนี้เป็นเท็จโดยค่าเริ่มต้น หากเป็น True ระบบจะค้นหาไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันซ้ำๆ เพื่อค้นหาไฟล์ที่ตรงกับรูปแบบที่กำหนด
โค้ดต่อไปนี้จะพิมพ์ไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบันที่มีนามสกุล '.py'
>>> import glob >>> for file in glob.glob("*.py"): print (file)
ในโค้ดต่อไปนี้ พารามิเตอร์ recursive=True ทำให้ไฟล์ที่มีนามสกุล '.py' จากไดเรกทอรีย่อยถูกพิมพ์เช่นกัน
>>> for file in glob.glob("*.py", recursive=True): print (file)
ชื่อพาธรูปแบบสามารถมีอักขระตัวแทน ? คำสั่งต่อไปนี้จะพิมพ์รายการไฟล์ที่มีชื่อสามตัวอักษรที่มีตัวอักษรสองตัวแรกคือ 'pp'
>>> for file in glob.glob("pp?.py"): print (file)
โค้ดต่อไปนี้จะพิมพ์ไฟล์ที่ชื่อลงท้ายด้วยตัวเลข
>>> for file in glob.glob('*[0-9].py') print (file)
ไวยากรณ์ต่อไปนี้ทำให้ไฟล์ที่ตรงกับเส้นทางที่กำหนดถูกพิมพ์ซ้ำ
>>> glob.glob('**/*.py', recursive=True)
หากต้องการพิมพ์ชื่อไดเร็กทอรีซ้ำๆ ในไดเร็กทอรีปัจจุบัน
>>> glob.glob('tcl/**/', recursive=True)
iglob()
ฟังก์ชันนี้ส่งคืนอ็อบเจ็กต์ตัวสร้างแทนที่จะเป็นรายการไฟล์ การใช้ฟังก์ชัน next() สามารถพิมพ์ชื่อไฟล์ที่ตามมาได้ดังนี้
>>> it=glob.iglob('*.py') >>> type(it) <class 'generator'> >>> while True: try: file=next(it) print (file) except StopIteration: break
หนี()
ฟังก์ชันนี้จะหนีออกจากอักขระที่กำหนด สิ่งนี้มีประโยชน์เมื่อไฟล์ที่มีอักขระบางตัวจำเป็นต้องเป็นส่วนหนึ่งของชื่อ ตัวอย่างต่อไปนี้ค้นหาไฟล์ที่มีอักขระใด ๆ ในสตริงอักขระ
>>> chars='[]()#' >>> for char in chars: esc='*'+glob.escape(char)+'.py' for file in (glob.glob(esc)): print (file) xyz[.py pp[].py pp(.py pp#.py.)