Mô-đun toàn cầu Python được sử dụng để tìm tên đường dẫn khớp với một mẫu cụ thể. Thuật ngữ chung "glob" được sử dụng để mô tả các phương pháp đối sánh các mẫu cụ thể theo quy tắc shell Unix. Với toàn cầu, bạn cũng có thể sử dụng các ký tự đại diện [“*, ?, [phạm vi]] ngoài tìm kiếm chuỗi chính xác để truy xuất đường dẫn hiệu quả hơn
Hãy tìm hiểu mô-đun toàn cầu Python
Mục lục
Mô-đun toàn cầu Python là gì?
Mô-đun toàn cầu Python cho phép tìm kiếm qua tên đường dẫn để tìm các tệp phù hợp với một mẫu nhất định [do bạn xác định]. Các quy tắc do Unix shell thiết lập được sử dụng để xác định mẫu được cung cấp để khớp tệp
Tất cả các đường dẫn tệp khớp với một mẫu nhất định được trả về bằng hàm toàn cầu của mô-đun toàn cục. Chúng tôi có thể sử dụng toàn cầu để tìm kiếm một mẫu tệp nhất định hoặc có lẽ hiệu quả hơn, chúng tôi có thể sử dụng các ký tự đại diện để tìm kiếm các tệp có tên tệp khớp với một mẫu nhất định
Để sử dụng toàn cầu, chúng ta phải nhập nó bằng câu lệnh nhập Python như bên dưới
import glob
Ghi chú. glob là một mô-đun tích hợp đi kèm với Python nên bạn không cần cài đặt nó riêng biệt với bản cài đặt Python của mình [e. g. sử dụng pip hoặc conda] trước khi nhập nó
Sau khi nhập mô-đun toàn cầu, chúng tôi có thể sử dụng nó để tìm các tệp khớp với một mẫu cụ thể trên máy cục bộ của chúng tôi
Đoạn mã sau khớp với một tên tệp cụ thể trong thư mục /opt/app/tutorial/ và hiển thị nó ở đầu ra
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
đầu ra là
['/opt/app/tutorial/file1.txt']
Trong đoạn mã trên, chúng tôi chỉ tìm kiếm một tệp văn bản, chúng tôi cũng có thể tìm kiếm nhiều tệp có cùng phần mở rộng tệp
import glob
files = glob.glob["/opt/app/tutorial/*.txt"]
print[files]
Như bạn có thể thấy, chúng tôi đã chỉ định “*. txt” khớp với tất cả các tệp có phần mở rộng txt trong thư mục được chỉ định. Ký tự “*” là ký tự đại diện
Giả sử chúng ta có năm tệp txt sau trong thư mục /opt/app/tutorial/
file1.txt file2.txt file3.txt file4.txt file5.txt
Sau khi thực thi mã Python, tôi nhận được đầu ra sau
['/opt/app/tutorial/file2.txt', '/opt/app/tutorial/file3.txt', '/opt/app/tutorial/file1.txt', '/opt/app/tutorial/file4.txt', '/opt/app/tutorial/file5.txt']
quả địa cầu. hàm glob[] trả về danh sách tất cả các tệp khớp với đường dẫn mà chúng tôi đã chỉ định
Bạn cũng có thể thấy rằng…
Hàm glob[] của mô-đun glob Python trả về kết quả theo thứ tự tùy ý
Sử dụng Đường dẫn tuyệt đối và tương đối với Python toàn cầu
Đường dẫn chúng ta cung cấp cho hàm global[] có thể là tuyệt đối hoặc tương đối
Hãy xem điều này có nghĩa là gì…
- đường dẫn tuyệt đối. đây là đường dẫn đầy đủ của tệp từ thư mục gốc của hệ thống tệp
- Đường dẫn tương đối. đây là đường dẫn liên quan đến thư mục hiện tại
Hai đoạn mã chúng ta đã thấy trước đây sử dụng một đường dẫn tuyệt đối
Bây giờ, hãy xem một ví dụ sử dụng đường dẫn tương đối…
import glob
files = glob.glob["*.txt"]
print[files]
Đường dẫn được chỉ định trong đoạn mã này là đường dẫn tương đối và nó đề cập đến thư mục hiện tại
Từ đầu ra, bạn có thể thấy rằng danh sách tệp chỉ chứa tên tệp chứ không phải đường dẫn đầy đủ cho mỗi tệp
['file2.txt', 'file3.txt', 'file1.txt', 'file4.txt', 'file5.txt']
Cách sử dụng quả cầu để tìm tệp theo cách đệ quy
Từ đệ quy có nghĩa là sự lặp lại liên quan đến việc áp dụng lặp đi lặp lại một quy tắc. Chúng tôi cũng có thể sử dụng toàn cầu để tìm kiếm tệp theo cách đệ quy, nghĩa là tìm kiếm tệp trong thư mục con
Bản chất đệ quy của mô-đun toàn cầu rất hữu ích vì bạn có thể không biết vị trí chính xác của các tệp bạn đang tìm kiếm
Để kích hoạt hành vi đệ quy, bạn phải chuyển đối số boolean đệ quy cho hàm glob[] được đặt thành True. Đối số này là Sai theo mặc định
Trước khi sử dụng đối số đệ quy, chúng tôi muốn hiểu hành vi của ký tự đại diện dấu hoa thị kép [**] khi được sử dụng với toàn cầu. chức năng toàn cầu []
Tạo một thư mục có tên test_dir trong thư mục hiện tại và sau đó bên trong test_dir tạo một tệp có tên file6. txt. Cấu trúc thư mục của chúng tôi trở thành như sau
________số 8Bây giờ hãy thực thi mã Python trước đó sử dụng “*. txt” dưới dạng biểu thức tên đường dẫn. Đầu ra như sau
['file2.txt', 'file3.txt', 'file1.txt', 'file4.txt', 'file5.txt']
Bây giờ, chuyển đối số đệ quy cho hàm toàn cầu
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
0Khi bạn thực thi mã, bạn sẽ nhận thấy rằng đầu ra không thay đổi. Đó là bởi vì đối số đệ quy phải được sử dụng cùng với ký tự đại diện hai dấu hoa thị [**]
Cập nhật biểu thức được truyền cho hàm global[] như hình bên dưới [không thay đổi bất kỳ điều gì khác trong mã trước đó]
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
1Lần này trong đầu ra, bạn cũng sẽ thấy “test_dir/file6. txt”. Mã của chúng tôi đã phù hợp với. txt trong thư mục hiện tại và cả thư mục. txt trong thư mục con test_dir
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
2Bây giờ, hãy thử đặt đệ quy thành Sai mà không thay đổi biểu thức tên đường dẫn
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
3đầu ra là
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
4Mã của chúng tôi chỉ khớp với tệp trong thư mục con
Bây giờ bạn đã biết cách hoạt động của dấu hoa thị kép cùng với tham số đệ quy khi sử dụng hàm glob[]
Sử dụng Ký tự đại diện với toàn cầu
Với mô-đun toàn cầu, bạn có thể sử dụng ký tự đại diện. Có nhiều ký tự đại diện nhưng các ký tự đại diện được sử dụng nhiều nhất được giải thích bên dưới
Dấu hoa thị [*]. toàn cầu sử dụng dấu hoa thị [*] còn được gọi là dấu sao để khớp với 0 hoặc nhiều ký tự
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
5Trong các ví dụ trên, * sẽ khớp với tất cả các tệp có phần mở rộng được chỉ định
Dấu hoa thị kép [**]. hai dấu hoa thị [**] giống như dấu hoa thị đơn nhưng chúng hoạt động với các thư mục con. Khi bạn đang tìm kiếm đệ quy, hãy sử dụng dấu hoa thị kép [**] để tìm kiếm các tệp trong các thư mục hiện tại cũng như trong các thư mục con
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
6Dấu ngoặc vuông [[ ]]. dấu ngoặc vuông là ký tự đại diện rất mạnh vì chúng cho phép tìm kiếm tệp bằng cách sử dụng các tổ hợp ký tự khác nhau
Ví dụ
- Giả sử bạn muốn tìm kiếm các tệp có tên khớp với các nguyên âm viết thường, để đạt được điều này, bạn sẽ chỉ định tất cả các nguyên âm viết thường trong dấu ngoặc vuông. [aiou]
- [0-9]. Nếu bạn muốn khớp bất kỳ chữ số nào, hãy chỉ định các chữ số từ 0 đến 9 trong dấu ngoặc vuông
- [A-Z]. nó khớp với bất kỳ chữ cái viết hoa nào, [a-z] khớp với bất kỳ chữ cái viết thường nào. Bạn cũng có thể kết hợp chữ hoa và chữ thường theo cách này. [a-z,A-Z]
- Nếu bạn muốn loại trừ một số ký tự thì bạn có thể sử dụng dấu ngoặc vuông và cũng chỉ định [. ] Biểu tượng. Ví dụ. [. abc]
Hãy thử một số ví dụ thực tế để hiểu các ký tự đại diện
Trước đây chúng ta đã thấy cách hoạt động của các ký tự đại diện * và **. Bây giờ hãy xem một ví dụ với dấu ngoặc vuông [[ ]]
Trong dấu ngoặc vuông, chúng tôi chỉ định mẫu số hoặc chữ cái để tìm kiếm
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
7Tạo các tệp sau trong thư mục hiện tại để xác nhận các biểu thức ký tự đại diện hoạt động như mong đợi
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
8Và bây giờ thực thi mã
đầu ra là
import glob
file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
9Mã của chúng tôi hoạt động như mong đợi và các tệp “fox. txt” và “67. txt” không khớp
Tại sao bạn nên sử dụng iglob vs glob trong Python?
Cho đến bây giờ chúng ta đã sử dụng hàm global[]. Trong mô-đun toàn cầu có một hàm khác gọi là iglob[]
Hàm iglob[] tương tự như hàm glob[], điểm khác biệt chính là iglob[] trả về một trình tạo tạo ra các tên tệp khớp với mẫu đã cho
Hãy xác nhận loại đối tượng mà hàm iglob[] trả về bằng cách sử dụng một trong các ví dụ mã trước đó. Chúng ta sẽ chỉ thay thế chức năng toàn cầu bằng chức năng iglob
['/opt/app/tutorial/file1.txt']
0Hàm glob[] đi qua tất cả các tệp và lưu trữ chúng trong bộ nhớ cùng một lúc, trong khi iglob[] trả về một trình tạo cho phép lặp qua tất cả các tệp mà không lưu trữ chúng đồng thời trong bộ nhớ
Bằng cách chuyển trình tạo tới hàm next[] của Python, bạn sẽ lấy lại tên tệp đầu tiên được trả về bởi hàm iglob
['/opt/app/tutorial/file1.txt']
1Hàm iglob[] rất hữu ích khi chúng ta so khớp một số lượng lớn tệp. Chúng tôi có thể mạo hiểm lấp đầy toàn bộ bộ nhớ bằng cách tải tất cả chúng bằng cách sử dụng glob[]
Để tránh điều này, iglob[] giúp chúng tôi khớp tất cả các tên tệp ở dạng trình tạo giúp cải thiện hiệu suất và giảm mức sử dụng bộ nhớ
Để in tất cả các tệp khớp với hàm iglob, bạn có thể sử dụng vòng lặp Python for
['/opt/app/tutorial/file1.txt']
2Phần kết luận
Bây giờ bạn đã hiểu rõ về cách thức hoạt động của mô-đun toàn cầu. Bạn đã học cách mô-đun toàn cục đặc biệt hữu ích cho các tác vụ liên quan đến khớp mẫu tên tệp và cách lấy danh sách tất cả các tệp tuân theo một mẫu cụ thể
Chúng tôi đã trình bày một số ví dụ thực tế về cách thức hoạt động của mô-đun toàn cục, bao gồm một số ký tự đại diện được sử dụng nhiều nhất
Và bạn cũng đã thấy sự khác biệt giữa glob[] và iglob[] và tại sao bạn nên sử dụng iglob[] thay vì hàm glob[]
tiền thưởng đọc. hiểu sâu hơn về Python và tìm hiểu thêm về năng suất Python mà chúng tôi đã đề cập khi mô tả hành vi của hàm iglob[]
Bài viết liên quan
Kế thừa lớp Python. Hướng dẫn về mã tái sử dụng
Lỗi Python. Quá nhiều giá trị để giải nén. Hãy sửa chữa nó
Tìm giá trị tối thiểu và tối đa trong từ điển Python [Từng bước]
Claudio Sabato
Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng