หลายครั้งโปรแกรมต้องวนซ้ำผ่านรายการไฟล์ในระบบไฟล์ บ่อยครั้งกับชื่อที่จับคู่กับรูปแบบ โมดูล glob มีประโยชน์ในการสร้างรายการไฟล์ในไดเรกทอรีเฉพาะ ที่มีนามสกุลเฉพาะ หรือมีสตริงเฉพาะเป็นส่วนหนึ่งของชื่อไฟล์
กลไกการจับคู่รูปแบบที่ใช้โดยฟังก์ชันโมดูล glob ปฏิบัติตามกฎการขยายพาธ UNIX โมดูลนี้ไม่ได้ขยาย tilde (~) และตัวแปร shell
มีหลัก 3 ฟังก์ชันในโมดูล glob:
glob()
ฟังก์ชันนี้คืนค่ารายการไฟล์ที่จับคู่กับรูปแบบที่ให้มาในพารามิเตอร์ pathname pathname สามารถเป็น absolute หรือ relative ได้ มันยังสามารถรวม wildcard เช่น * และ ? ได้
พารามิเตอร์ recursive ของฟังก์ชันนี้เป็น False ตามค่าเริ่มต้น หากเป็น True ไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันจะถูกค้นหาแบบ recursive เพื่อหาไฟล์ที่จับคู่กับรูปแบบที่ให้มา
โค้ดต่อไปนี้พิมพ์ไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันที่มีนามสกุล '.py':
>>> import glob
>>> for file in glob.glob("*.py"):
... print(file)
ในโค้ดต่อไปนี้ พารามิเตอร์ recursive=True ทำให้ไฟล์ที่มีนามสกุล '.py' จากไดเรกทอรีย่อยถูกพิมพ์ด้วย:
>>> for file in glob.glob("*.py", recursive=True):
... print(file)
พาธเนมรูปแบบสามารถรวมตัวอักษร wildcard ? ได้ คำสั่งต่อไปนี้พิมพ์รายการไฟล์ที่ชื่อมี 3 ตัวอักษร โดย 2 ตัวแรกคือ 'pp':
>>> for file in glob.glob("pp?.py"):
... print(file)
โค้ดต่อไปนี้พิมพ์ไฟล์ที่ชื่อลงท้ายด้วยตัวเลข:
>>> for file in glob.glob('*[0-9].py'):
... print(file)
ไวยากรณ์ต่อไปนี้ทำให้ไฟล์ที่จับคู่กับพาธที่ให้มาถูกพิมพ์แบบ recursive:
>>> glob.glob('**/*.py', recursive=True)
เพื่อพิมพ์ชื่อไดเรกทอรีแบบ recursive ในไดเรกทอรีปัจจุบัน:
>>> glob.glob('tcl/**/', recursive=True)
iglob()
ฟังก์ชันนี้คืนค่าอ็อบเจ็กต์เจเนอเรเตอร์ (generator object) แทนที่จะเป็นรายการไฟล์ โดยใช้ฟังก์ชัน next() ชื่อไฟล์ต่อไปสามารถพิมพ์ได้ดังนี้:
>>> it = glob.iglob('*.py')
>>> type(it)
>>> while True:
... try:
... file = next(it)
... print(file)
... except StopIteration:
... break
escape()
ฟังก์ชันนี้ escape ตัวอักษรที่ให้มา นี่มีประโยชน์เมื่อไฟล์ที่มีตัวอักษรบางตัวต้องเป็นส่วนหนึ่งของชื่อ ตัวอย่างต่อไปนี้ค้นหาไฟล์ที่มีตัวอักษรใดตัวหนึ่งในสตริง chars:
>>> 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