Python khớp với mẫu tên tệp

Các mẫu tên tệp phù hợp

Các công thức thực tế để làm việc với tệp trong Python
08. 03

Đánh dấu là đã hoàn thành

Vật liệu hỗ trợ

Các slide khóa học hướng dẫn được đề xuất [. pdf] Thư mục mẫu [. nén]

Trở thành Thành viên để tham gia cuộc trò chuyện

Các mẫu ký tự đại diện được sử dụng trong các dòng lệnh Unix shell 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 cho các mẫu thẻ đại diện 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 tệp và mẫu chuỗi ký tự. Tên của tệp được khớp với mẫu đã cho và hàm trả về Đúng hoặc Sai

Ví dụ sau liệt kê tất cả các tệp 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[]

Chức năng này tương tự như fnmatch[]. Tuy nhiên, chức năng này thực hiện khớp phân biệt chữ hoa chữ thường của patters với tên tệp

Trong ví dụ sau, tất cả các tệp có tên bắt đầu bằng 'l' và '. phần mở rộng py’ lần đầu tiên được thu thập trong một đối tượng danh sách tệp. Hàm fnmatch[] chỉ được áp dụng để in 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.svg

lọc[]

Hàm này chỉ trả về những tệp có tên khớp với tham số mẫu đã cho

Câu lệnh sau trả về danh sách các tệp có '. txt’ ra khỏi tất cả các tệp 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']

dịch[]

Chức năng này rất 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[] phải được chuyển đổi thành biểu thức chính quy bằng cách sử dụng hàm compile[] của mô-đun re. Điều này sau đó được sử dụng để phù hợp với mẫu

Ở đây chúng ta sẽ xem làm thế nào chúng ta có thể nhận được các kỹ thuật khớp mẫu kiểu vỏ UNIX bằng Python. Có một mô-đun gọi là fnmatch, được sử dụng để thực hiện công việc. Mô-đun này được sử dụng để so sánh tên tệp với một mẫu, sau đó trả về Đúng hoặc Sai tùy theo kết quả khớp

Để sử dụng nó, trước tiên chúng ta cần nhập mô-đun thư viện chuẩn fnmatch

import fnmatch

Trong thiết bị đầu cuối Unix, có một số ký tự đại diện để khớp với các mẫu. Chúng giống như dưới đây -

  • ‘*’ Dấu hoa thị được sử dụng để khớp với mọi thứ
  • ‘?’ Dấu chấm hỏi dùng để ghép một ký tự đơn
  • [seq] Chuỗi được sử dụng để khớp các ký tự theo thứ tự
  • [. seq] Not in Sequence được sử dụng để khớp các ký tự không có trong chuỗi

Nếu chúng ta muốn tìm kiếm dấu hoa thị hoặc dấu chấm hỏi dưới dạng ký tự, thì chúng ta phải sử dụng chúng như thế này. [*] hoặc [?]

Phương thức fnmatch[]

Phương thức fnmatch[] nhận hai đối số, đó là tên tệp và mẫu. Hàm này dùng để kiểm tra xem tên tệp có khớp với mẫu đã cho hay không. Khi Hệ điều hành phân biệt chữ hoa chữ thường, thì các tham số sẽ được chuẩn hóa thành chữ hoa hoặc chữ thường trước khi khớp

Mã ví dụ

import fnmatch
import os
file_pattern = 'test_f*'
files = os.listdir['./unix_files']
for filename in files:
   print['File: {}\t: {}'.format[filename, fnmatch.fnmatch[filename, file_pattern]]]

đầu ra

$ python3 310.UNIX_filename.py
File: test_file5.txt : True
File: test_file2.png : True
File: test_file1.txt : True
File: another_file.txt : False
File: TEST_FILE4.txt : False
File: abc.txt : False
File: test_file3.txt : True
$

Phương thức lọc[]

Phương thức filter[] cũng nhận hai tham số. Cái đầu tiên là tên, và cái thứ hai là mẫu. Mẫu này tìm danh sách tên tệp phù hợp từ danh sách tất cả tên tệp

Mã ví dụ

import fnmatch
import os
file_pattern = 'test_f*'
files = os.listdir['./unix_files']
match_file = fnmatch.filter[files, file_pattern]
   print['All files:' + str[files]]
      print['\nMatched files:' + str[match_file]]

đầu ra

$ python3 310.UNIX_filename.py
All files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'another_file.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt']
Matched files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt']
$

Phương thức dịch[]

Phương thức translate[] nhận một tham số. Tham số là một mẫu. Chúng ta có thể sử dụng chức năng này để chuyển đổi một mẫu kiểu shell sang một kiểu mẫu khác để khớp bằng cách sử dụng các biểu thức chính quy trong Python

Fnmatch nghĩa là gì trong Python?

fnmatch[filename, pattern] Kiểm tra xem chuỗi tên tệp có khớp với chuỗi mẫu hay không, trả về Đúng hoặc Sai . Cả hai tham số đều được chuẩn hóa chữ hoa chữ thường bằng cách sử dụng os. đường dẫn.

Toàn cầu Python có sử dụng regex không?

Các quy tắc mẫu cho toàn cục không phải là biểu thức chính quy . Thay vào đó, chúng tuân theo các quy tắc mở rộng đường dẫn Unix tiêu chuẩn. Chỉ có một số ký tự đặc biệt. hai ký tự đại diện khác nhau và phạm vi ký tự được hỗ trợ.

Làm cách nào để sử dụng mô-đun toàn cầu trong Python?

Cú pháp. Sau đây là cú pháp sử dụng hàm iglob[] của mô-đun glob bên trong chương trình Python. iglob[tên đường dẫn, *, đệ quy=Sai] .
# Nhập mô-đun toàn cầu trong chương trình
nhập toàn cầu dưới dạng gb
# Khởi tạo một biến
inVar = gb. .
# Trả về loại biến của lớp
in [loại [inVar]]

Mô-đun toàn cầu Python là gì?

Trong Python, mô-đun toàn cầu được sử dụng để truy xuất các tệp/tên đường dẫn khớp với một mẫu đã chỉ định . Các quy tắc mẫu của toàn cầu tuân theo các quy tắc mở rộng đường dẫn Unix tiêu chuẩn. Người ta cũng dự đoán rằng theo điểm chuẩn, nó nhanh hơn các phương pháp khác để khớp tên đường dẫn trong thư mục.

Chủ Đề