Trăn đường dẫn tương đối toàn cầu

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

Bâ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]
0

Khi 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]
1

Lầ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]
2

Bâ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]
4

Mã 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]
5

Trong 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]
6

Dấ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]
7

Tạ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]
8

Và bây giờ thực thi mã

đầu ra là

import glob

file = glob.glob["/opt/app/tutorial/file1.txt"]
print[file]
9

Mã 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']
0

Hà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']
1

Hà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']
2

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

Toàn cầu có trả về đường dẫn tuyệt đối không?

Nếu tên tệp hoặc tên đường dẫn khớp với đường dẫn tuyệt đối thì hàm glob[] trả về kết quả khớp ở dạng danh sách ; .

Toàn cầu Python có đệ quy không?

Từ Python 3. 5 trở đi, lập trình viên có thể sử dụng hàm Glob[] để tìm tệp theo cách đệ quy . Trong Python, mô-đun glob đóng một vai trò quan trọng trong việc truy xuất các tệp và tên đường dẫn khớp với mẫu đã chỉ định được truyền dưới dạng tham số của nó. 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.

Toàn cầu có hỗ trợ 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ợ. Các quy tắc mẫu được áp dụng cho các phân đoạn của tên tệp [dừng ở dấu tách đường dẫn, /].

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

Chủ Đề