Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Các Mô-đun Chuỗi & Thời Gian
Mô-đun Regex
Mục tiêu
Xác minh và sắp xếp các tập tin liên quan đến nhân viên và phân bổ khu vực bằng cách sử dụng các biểu thức chính quy.
Ở các văn phòng lân cận có một số tài liệu cần được cập nhật liên quan đến nhân viên bắt đầu làm việc trên vùng đất nông nghiệp mới và khu vực được giao để trồng trọt và chăn nuôi. Việc quản lý các tập tin có thể khá phức tạp, đặc biệt là khi xử lý các chuỗi ký tự lớn. Vì mục đích này, chúng ta sẽ sử dụng module re, viết tắt của Regular Expressions, còn được gọi là Regex. Chúng ta có thể truy cập các hàm của nó bằng cách sử dụng import re, đối với mục đích của cấp độ này, chúng ta sẽ sử dụng các hàm sau:
re.findall(): Trả về một danh sách tất cả các trường hợp xuất hiện của một chuỗi. Nhận hai (2) đối số, đối số thứ nhất là các ký tự mà bạn đang tìm kiếm trong một chuỗi, đối số thứ hai là chuỗi để tìm kiếm.re.sub(): Thay thế trường hợp được chỉ định bằng một chuỗi nhất định. Nhận ba (3) đối số, đối số thứ nhất là các ký tự bạn muốn thay thế, đối số thứ hai là giá trị thay thế và đối số thứ ba là chuỗi bạn muốn tìm kiếm.re.search(): Tìm vị trí của một thứ gì đó trong một chuỗi, trả về một đối tượng. Nhận hai (2) đối số, các ký tự bạn đang tìm kiếm và chuỗi bạn đang tìm kiếm. Bạn có thể sử dụng các hàm khác với đối tượng trả về nhưspan()để trả về một vector của vị trí bắt đầu và kết thúc của mục được tìm kiếm trong văn bản.re.split(): Tách chuỗi thành một danh sách tại các khoảng cách được chỉ định. Nhận hai (2) đối số, đối số thứ nhất là nơi để tách chuỗi và đối số thứ hai là chuỗi bạn muốn tách.re.match(): Kiểm tra xem một chuỗi có chứa một giá trị nhất định ở đầu chuỗi hay không. Hàm này làm việc như phiên bản đơn giản của hàmre.search()nhưng hiệu quả hơn và kiểm tra xem chuỗi bạn đang tìm kiếm có chứa truy vấn ở đầu hay không.
Module re cũng có thể sử dụng các chuỗi đặc biệt, có những mã mà bạn có thể sử dụng với các hàm re cho phép bạn bao quát một loạt các thuộc tính chuỗi. Có một danh sách dài các chuỗi đặc biệt nhưng đối với cấp độ này, chúng ta sẽ sử dụng các mục sau:
\B: Kiểm tra xem các ký tự được chỉ định có xuất hiện trong chuỗi nhưng không nằm ở đầu hoặc cuối của một từ hay không.\D: Trả về các ký tự không phải là chữ số từ 0-9
Nếu xuất hiện một r với một chuỗi đặc biệt, có nghĩa là nó đang kiểm tra chuỗi thô (raw string).
Bắt đầu bằng cách đi đến dấu X vàng và hướng về phía bàn có bản ghi nhớ, sử dụng hàm read() để kiểm tra bản ghi nhớ chứa danh sách tất cả nhân viên. Mỗi tên có chứa # để phân định số nhân viên, chuỗi chứa các tên cũng được lưu trữ trong một hằng số có tên là manifest.
Tạo một danh sách có tên tags và lưu trữ giá trị của re.findall(), được sử dụng để tìm tất cả các # trong hằng số manifest, như sau: tags = re.findall("#", manifest). Tạo một biến có tên number và sử dụng len() với danh sách tags để đếm số lượng mục có trong danh sách, điều này sẽ cho chúng ta biết có bao nhiêu nhân viên trong danh sách. Sử dụng hàm speak() với biến number để thông báo số lượng tên có trong danh sách.
Tiếp theo, đi đến dấu X sáng bên cạnh thảm xanh và hướng về phía bàn, sử dụng hàm read(). Tại đây bạn sẽ có danh sách các nhân viên mới với các vị trí được giao. Ghi chú các tên trong mỗi ngành nghề để bạn có thể đối chiếu với những người hiện đang được giao nhiệm vụ. Đi đến dấu X bên trên thảm xanh và sử dụng read() một lần nữa để xác nhận các công việc hiện đang được giao.
Lực lượng lao động hiện tại được lưu trữ trong một hằng số có tên assignments, chúng ta phải cập nhật tài liệu này với thông tin trong danh sách nhân viên mới. Thay thế các tên khác nhau trong danh sách bằng cách sử dụng hàm re.sub() để thay thế một phần của chuỗi bằng một phần khác. Ví dụ, một trong số các chỉnh sửa như sau:
assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)
Tên "Billy Hodgins" được thay thế bằng "Carol Hopkins" trong tài liệu. Bên cạnh thay đổi này, hãy quét qua tài liệu và cập nhật thay đổi này và một tên khác trong danh sách để cập nhật hoàn chỉnh tài liệu. Sử dụng hàm write() với assignments để kiểm tra kết quả.
Bây giờ khi chúng ta đã xử lý danh sách nhân viên, đã đến lúc chuyển sang phân khu cho trang trại. Đi đến dấu X tối trên thảm đỏ và sử dụng hàm read(), điều này sẽ hiển thị cho bạn một đánh giá chi tiết về phân khu. Thông tin này được lưu trữ trong một hằng số có tên zones.
Đáng chú ý là điều quan trọng cần xác định vị trí của 6210 trong tài liệu vì khu vực này cần được đánh giá lại. Để làm điều này, chúng ta cần sử dụng hàm re.search() để xác định vị trí của số khu vực đó trong bản đồ phân khu. Tạo một biến có tên index và lưu trữ đối tượng tìm kiếm, đặt tìm kiếm thành r"6210\B". Điều này có nghĩa là, r tìm kiếm một chuỗi thô, 6210 là số khu vực chúng ta đang tìm, và \B là tiêu chí chuỗi đặc biệt cho lệnh tìm kiếm. Việc này được thực hiện như sau: index = re.search(r"6210\B", zones).
Bây giờ khi index chứa một đối tượng tìm kiếm, đã đến lúc trích xuất dữ liệu từ nó bằng cách sử dụng span(). Tạo một biến có tên vector và lưu trữ vị trí của đối tượng tìm kiếm, như sau: vector = index.span(). Sau khi thiết lập xong, sử dụng biến vector với hàm write() đã được viết sẵn.
Tiếp theo, chúng ta sẽ làm việc để xác định các mục phân khu. Đi đến dấu X tối trên thảm xanh. Tạo một danh sách có tên sectors và sử dụng hàm re.split() để hợp nhất tất cả các khu vực phân chia thành một danh sách. Trên hàm split, sử dụng chuỗi đặc biệt "\D" để chỉ lấy các số từ biến zones. Sử dụng một list comprehension để loại bỏ bất kỳ khoảng trống nào trong danh sách bằng cách sử dụng hàm len() để loại bỏ các mục quá ngắn để là số khu vực. Như sau:
sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]
Sử dụng biến zones với các hàm write() để liệt kê tất cả các khu vực phân chia.
Đi đến dấu X sáng bên cạnh thảm màu tím và hướng về phía tủ hồ sơ, sử dụng hàm read() để xác nhận các khu vực ưu tiên trong phân khu đất nông nghiệp. Ghi chú các khu vực vì chúng ta cần xác minh xem các khu vực này có nằm trong danh sách phân chia hay không.
Đi đến dấu X tối trên thảm màu tím, có ba (3) khu vực ưu tiên trong các biến có tên: sector_a, sector_b, sector_c, được viết sẵn trên các trình chỉnh sửa mã, chèn các giá trị bạn đã đọc tại dấu X sáng. Các biến này sử dụng list comprehension chạy qua tất cả các mục trong danh sách sectors và lọc chúng qua hàm re.match(). Sử dụng các biến sector_a, sector_b, sector_c và chèn chúng vào hàm write() đã được viết sẵn để hoàn thành cấp độ.