glob --- Mở rộng mẫu tên đường dẫn kiểu Unix

Source code: Lib/glob.py


Mô-đun glob tìm tên đường dẫn bằng cách sử dụng các quy tắc khớp mẫu tương tự như Unix shell. Không thực hiện mở rộng dấu ngã, nhưng phạm vi *, ? và ký tự được biểu thị bằng [] sẽ được khớp chính xác. Điều này được thực hiện bằng cách sử dụng phối hợp các hàm os.scandir()fnmatch.fnmatch() chứ không phải bằng cách thực sự gọi một hệ vỏ con.

Ghi chú

Tên đường dẫn được trả về không theo thứ tự cụ thể. Nếu bạn cần một thứ tự cụ thể, hãy sắp xếp kết quả.

Các tệp bắt đầu bằng dấu chấm (.) chỉ có thể được khớp với các mẫu cũng bắt đầu bằng dấu chấm, không giống như fnmatch.fnmatch() hoặc pathlib.Path.glob(). Để mở rộng biến dấu ngã và shell, hãy sử dụng os.path.expanduser()os.path.expandvars().

Để 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ự '?'.

Mô-đun glob xác định các chức năng sau:

glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Trả về danh sách tên đường dẫn trống có thể khớp với pathname, danh sách này phải là một chuỗi chứa đặc tả đường dẫn. pathname có thể là tuyệt đối (như /usr/src/Python-1.5/Makefile) hoặc tương đối (như ../../Tools/*/*.gif) và có thể chứa các ký tự đại diện kiểu shell. Các liên kết tượng trưng bị hỏng được bao gồm trong kết quả (như trong shell). Kết quả có được sắp xếp hay không tùy thuộc vào hệ thống tập tin. Nếu một tệp thỏa mãn các điều kiện bị xóa hoặc thêm vào trong khi gọi hàm này, thì tên đường dẫn cho tệp đó có được đưa vào hay không là không xác định.

Nếu root_dir không phải là None thì đó phải là path-like object chỉ định thư mục gốc để tìm kiếm. Nó có tác dụng tương tự trên glob() như thay đổi thư mục hiện tại trước khi gọi nó. Nếu pathname là tương đối thì kết quả sẽ chứa các đường dẫn liên quan đến root_dir.

Chức năng này có thể hỗ trợ paths relative to directory descriptors với tham số dir_fd.

Nếu recursive là đúng, mẫu "**" sẽ khớp với bất kỳ tệp nào và không hoặc nhiều thư mục, thư mục con và liên kết tượng trưng đến thư mục. Nếu mẫu được theo sau bởi os.sep hoặc os.altsep thì các tệp sẽ không khớp.

Nếu include_hidden là đúng, mẫu "**" sẽ khớp với các thư mục ẩn.

Tăng một auditing event glob.glob với các đối số pathname, recursive.

Tăng một auditing event glob.glob/2 với các đối số pathname, recursive, root_dir, dir_fd.

Ghi chú

Việc sử dụng mẫu "**" trong cây thư mục lớn có thể tiêu tốn quá nhiều thời gian.

Ghi chú

Hàm này có thể trả về tên đường dẫn trùng lặp nếu pathname chứa nhiều mẫu "**" và recursive là đúng.

Ghi chú

Mọi ngoại lệ OSError phát sinh từ quá trình quét hệ thống tập tin đều bị chặn. Điều này bao gồm PermissionError khi truy cập các thư mục mà không có quyền đọc.

Thay đổi trong phiên bản 3.5: Hỗ trợ các khối đệ quy sử dụng "**".

Thay đổi trong phiên bản 3.10: Đã thêm thông số root_dirdir_fd.

Thay đổi trong phiên bản 3.11: Đã thêm tham số include_hidden.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Trả về một iterator mang lại các giá trị tương tự như glob() mà không thực sự lưu trữ tất cả chúng cùng một lúc.

Tăng một auditing event glob.glob với các đối số pathname, recursive.

Tăng một auditing event glob.glob/2 với các đối số pathname, recursive, root_dir, dir_fd.

Ghi chú

Hàm này có thể trả về tên đường dẫn trùng lặp nếu pathname chứa nhiều mẫu "**" và recursive là đúng.

Ghi chú

Mọi ngoại lệ OSError phát sinh từ quá trình quét hệ thống tập tin đều bị chặn. Điều này bao gồm PermissionError khi truy cập các thư mục mà không có quyền đọc.

Thay đổi trong phiên bản 3.5: Hỗ trợ các khối đệ quy sử dụng "**".

Thay đổi trong phiên bản 3.10: Đã thêm thông số root_dirdir_fd.

Thay đổi trong phiên bản 3.11: Đã thêm tham số include_hidden.

glob.escape(pathname)

Thoát tất cả các ký tự đặc biệt ('?', '*''['). Điều này hữu ích nếu bạn muốn khớp một chuỗi ký tự tùy ý có thể có các ký tự đặc biệt trong đó. Các ký tự đặc biệt trong điểm chia sẻ drive/UNC không được thoát, ví dụ: trên Windows escape('//?/c:/Quo vadis?.txt') trả về '//?/c:/Quo vadis[?].txt'.

Added in version 3.4.

glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)

Chuyển đổi đặc tả đường dẫn đã cho thành biểu thức chính quy để sử dụng với re.match(). Đặc tả đường dẫn có thể chứa các ký tự đại diện kiểu shell.

Ví dụ:

>>> import glob, re
>>>
>>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True)
>>> regex
'(?s:(?:.+/)?[^/]*\\.txt)\\z'
>>> reobj = re.compile(regex)
>>> reobj.match('foo/bar/baz.txt')
<re.Match object; span=(0, 15), match='foo/bar/baz.txt'>

Dấu phân cách và phân đoạn đường dẫn có ý nghĩa đối với chức năng này, không giống như fnmatch.translate(). Theo mặc định, các ký tự đại diện không khớp với các dấu phân cách đường dẫn và các đoạn mẫu * khớp chính xác với một đoạn đường dẫn.

Nếu recursive là đúng, phân đoạn mẫu "**" sẽ khớp với bất kỳ số lượng phân đoạn đường dẫn nào.

Nếu include_hidden là đúng, các ký tự đại diện có thể khớp với các đoạn đường dẫn bắt đầu bằng dấu chấm (.).

Một chuỗi các dấu phân cách đường dẫn có thể được cung cấp cho đối số seps. Nếu không được cung cấp, os.sepaltsep (nếu có) sẽ được sử dụng.

Xem thêm

Các phương thức pathlib.PurePath.full_match()pathlib.Path.glob() gọi hàm này để thực hiện khớp mẫu và tạo khối.

Added in version 3.13.

Ví dụ

Hãy xem xét một thư mục chứa các tệp sau: 1.gif, 2.txt, card.gif và thư mục con sub chỉ chứa tệp 3.txt. glob() sẽ cho ra kết quả như sau. Lưu ý cách giữ nguyên mọi thành phần hàng đầu của đường dẫn.

>>> nhập khẩu toàn cầu
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
>>> glob.glob('**/*.txt', recursive=True)
['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
['./', './sub/']

Nếu thư mục chứa các tệp bắt đầu bằng . thì chúng sẽ không được khớp theo mặc định. Ví dụ: hãy xem xét một thư mục chứa card.gif.card.gif:

>>> nhập khẩu toàn cầu
>>> glob.glob('*.gif')
['thẻ.gif']
>>> glob.glob('.c*')
['.card.gif']

Xem thêm

Mô-đun fnmatch cung cấp tính năng mở rộng tên tệp (không phải đường dẫn) kiểu shell.

Xem thêm

Mô-đun pathlib cung cấp các đối tượng đường dẫn cấp cao.