fnmatch --- Khớp mẫu tên tệp Unix

Source code: Lib/fnmatch.py


Mô-đun này cung cấp hỗ trợ cho các ký tự đại diện kiểu shell Unix, not giống như các biểu thức thông thường (được ghi lại trong mô-đun re). Các ký tự đặc biệt được sử dụng trong ký tự đại diện kiểu shell là:

mẫu

Ý nghĩa

*

phù hợp với mọi thứ

?

khớp với bất kỳ ký tự đơn nào

[seq]

khớp với bất kỳ ký tự nào trong seq

[!seq]

khớp với bất kỳ ký tự nào không có trong seq

Để khớp theo nghĩa đen, hãy gói các ký tự meta trong ngoặc đơn. Ví dụ: '[?]' khớp với ký tự '?'.

Lưu ý rằng dấu phân cách tên tệp ('/' trên Unix) là not đặc biệt cho mô-đun này. Xem mô-đun glob để biết phần mở rộng tên đường dẫn (glob sử dụng filter() để khớp với các phân đoạn tên đường dẫn). Tương tự, tên tệp bắt đầu bằng dấu chấm không phải là đặc biệt đối với mô-đun này và được khớp với các mẫu *?.

Trừ khi có quy định khác, "chuỗi tên tệp" và "chuỗi mẫu" đề cập đến các đối tượng bytes được mã hóa str hoặc ISO-8859-1. Lưu ý rằng các hàm được ghi lại bên dưới không cho phép kết hợp mẫu bytes với tên tệp str và ngược lại.

Cuối cùng, lưu ý rằng functools.lru_cache() với maxsize là 32768 được sử dụng để lưu vào bộ đệm các mẫu biểu thức chính quy được biên dịch (đã gõ) trong các hàm sau: fnmatch(), fnmatchcase(), filter(), filterfalse().

fnmatch.fnmatch(name, pat)

Kiểm tra xem chuỗi tên tệp name có khớp với chuỗi mẫu pat hay không, trả về True hoặc False. Cả hai tham số đều được chuẩn hóa theo kiểu chữ bằng cách sử dụng os.path.normcase(). fnmatchcase() có thể được sử dụng để thực hiện so sánh phân biệt chữ hoa chữ thường, bất kể đó có phải là tiêu chuẩn cho hệ điều hành hay không.

Ví dụ này sẽ in tất cả tên tệp trong thư mục hiện tại có phần mở rộng .txt:

nhập fnmatch
hệ điều hành nhập khẩu

cho tệp trong os.listdir('.'):
    nếu fnmatch.fnmatch(tệp, '*.txt'):
        in (tập tin)
fnmatch.fnmatchcase(name, pat)

Kiểm tra xem chuỗi tên tệp name có khớp với chuỗi mẫu pat hay không, trả về True hoặc False; việc so sánh phân biệt chữ hoa chữ thường và không áp dụng os.path.normcase().

fnmatch.filter(names, pat)

Xây dựng danh sách từ các phần tử của iterable của chuỗi tên tệp names khớp với chuỗi mẫu pat. Nó giống như [n for n in names if fnmatch(n, pat)] nhưng được triển khai hiệu quả hơn.

fnmatch.filterfalse(names, pat)

Xây dựng danh sách từ các phần tử của iterable của chuỗi tên tệp names không khớp với chuỗi mẫu pat. Nó giống như [n for n in names if not fnmatch(n, pat)] nhưng được triển khai hiệu quả hơn.

Added in version 3.14.

fnmatch.translate(pat)

Trả về mẫu kiểu shell pat được chuyển đổi thành biểu thức chính quy để sử dụng với re.match(). Mẫu dự kiến ​​​​sẽ là str.

Ví dụ:

>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'(?s:.*\\.txt)\\z'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<re.Match object; span=(0, 10), match='foobar.txt'>

Xem thêm

Mô-đun glob

Mở rộng đường dẫn kiểu shell Unix.