Computer >> Máy Tính >  >> Lập trình >> Python

Mở rộng mẫu đường dẫn kiểu Unix trong Python (toàn cầu)

Nhiều khi một chương trình cần phải lặp lại qua danh sách các tệp trong hệ thống tệp, thường có các tên khớp với một mẫu. Mô-đun cầu rất hữu ích trong việc tạo nhiều tệp trong thư mục cụ thể, có một phần mở rộng nhất định hoặc với một chuỗi nhất định như một phần của tên tệp.

Cơ chế đối sánh mẫu được sử dụng bởi các hàm mô-đun toàn cầu tuân theo các quy tắc mở rộng đường dẫn UNIX. Mặc dù mô-đun này không mở rộng dấu ngã (~) và các biến shell.

Chủ yếu có ba chức năng trong mô-đun toàn cầu

global ()

Hàm này trả về danh sách các tệp phù hợp với mẫu đã cho trong tham số tên đường dẫn. Tên đường dẫn có thể là tuyệt đối hoặc tương đối. Nó có thể bao gồm các thẻ đại diện như * và?.

Tham số đệ quy của hàm này là False theo mặc định. Nếu Đúng, các thư mục con của thư mục hiện tại được tìm kiếm đệ quy để tìm các tệp phù hợp với mẫu đã cho.

Mã sau sẽ in tất cả tệp trong thư mục hiện tại có phần mở rộng là ‘.py’.

>>> import glob
>>> for file in glob.glob("*.py"):
print (file)

Trong đoạn mã sau, tham số recursive =True khiến các tệp có phần mở rộng ‘.py’ ​​từ các thư mục con cũng được in.

>>> for file in glob.glob("*.py", recursive=True):
print (file)

Tên đường dẫn mẫu có thể bao gồm ký tự thẻ đại diện ?. câu lệnh sau in ra danh sách các tệp có tên gồm ba chữ cái với hai chữ cái đầu tiên là ‘pp’.

>>> for file in glob.glob("pp?.py"):
print (file)

Mã sau sẽ in các tệp có tên kết thúc bằng một chữ số.

>>> for file in glob.glob('*[0-9].py')
print (file)

Cú pháp sau khiến các tệp khớp với đường dẫn đã cho được in đệ quy.

>>> glob.glob('**/*.py', recursive=True)

Để in tên của các thư mục một cách đệ quy trong thư mục hiện tại,

>>> glob.glob('tcl/**/', recursive=True)

iglob ()

Hàm này trả về một đối tượng trình tạo thay vì danh sách các tệp. Sử dụng hàm next (), các tên tệp tiếp theo có thể được in như bên dưới.

>>> it=glob.iglob('*.py')
>>> type(it)
<class 'generator'>
>>> while True:
try:
file=next(it)
print (file)
except StopIteration:
break

Escape ()

Hàm này thoát các ký tự đã cho. Điều này rất hữu ích khi các tệp có các ký tự nhất định cần phải là một phần của tên. Ví dụ sau tìm kiếm các tệp có bất kỳ ký tự nào trong chuỗi ký tự.

>>> 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