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