Các mẫu ký tự đại diện (wildcard) dùng trong dòng lệnh shell Unix khác với cú pháp biểu thức chính quy. Trong thư viện chuẩn của Python, mô-đun fnmatch cung cấp các mẫu ký tự đại diện kiểu Unix.
Các hàm sau được định nghĩa trong mô-đun fnmatch:
fnmatch()
Hàm này cần hai tham số - tên file và chuỗi mẫu ký tự. Tên file được khớp với mẫu cho trước và hàm trả về True hoặc False.
Ví dụ sau liệt kê tất cả file khớp với mẫu "*.py" từ thư mục hiện tại.
>>> import glob, fnmatch
>>> for files in (glob.glob('*.*')):
... if (fnmatch.fnmatch(files, "*.py")):
... print(files)fnmatchcase()
Hàm này tương tự fnmatch(). Tuy nhiên hàm này thực hiện khớp mẫu phân biệt chữ hoa chữ thường (case sensitive) với tên file.
Trong ví dụ sau, tất cả file với tên bắt đầu bằng 'l' và phần mở rộng '.py' trước được thu thập trong đối tượng danh sách files. Hàm fnmatch() được áp dụng để in chỉ những tên bắt đầu bằng ký tự '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.svgfilter()
Hàm này chỉ trả về những file nào tên khớp với tham số mẫu cho trước.
Câu lệnh sau trả về danh sách file với phần mở rộng '.txt' từ tất cả file trong thư mục hiện tại.
>>> 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']
translate()
Hàm này hữu ích để chuyển đổi mẫu kiểu Unix thành dạng RegEx tương ứng. Giá trị trả về của hàm translate() nên được chuyển đổi thành biểu thức chính quy bằng hàm compile() của mô-đun re. Điều này sau đó được dùng để khớp mẫu.
>>> 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)Trong bài viết này, các hàm trong mô-đun fnmatch đã được giải thích.