Đôi khi, bạn cần thực hiện các thay đổi đối với nhiều tệp văn bản—ví dụ: nếu bạn muốn cập nhật một số tệp để sử dụng cách viết của Hoa Kỳ thay vì cách viết của Vương quốc Anh
Trong thủ thuật nhanh này, tôi sẽ chỉ cho bạn một ví dụ mà chúng tôi có năm tệp văn bản bị sai chính tả một từ. Tức là thay vì viết "World" thì viết "Wolrd". Ví dụ này sẽ cho bạn thấy cách chúng ta có thể sử dụng Python để sửa lỗi chính tả của từ này trong tất cả các tệp văn bản có trong một thư mục
Bắt đầu nào
Chuẩn bị dữ liệu
Trước khi tiếp tục với ví dụ, hãy chuẩn bị dữ liệu [tệp văn bản] mà chúng ta muốn làm việc với. Đối với hướng dẫn này, chúng tôi sẽ tạo một thư mục có tên là hello, thư mục này sẽ có các tệp và thư mục con khác nhau bao gồm các tệp văn bản có tên 1. txt, 2. txt, 3. txt, 4. txt và 5. txt
Mặc dù chức năng chúng tôi sẽ sử dụng để lặp qua danh sách tệp sẽ bao gồm tất cả các tệp trong thư mục, nhưng chúng tôi có thể thêm các điều kiện của riêng mình vào mã để giới hạn bản thân trong các tệp mà chúng tôi muốn sửa đổi
Thực hiện
Hãy đến với phần thú vị. Việc đầu tiên chúng ta cần làm là đọc nội dung của thư mục hello. Đối với điều này, chúng ta có thể sử dụng phương pháp
entries = [it.name for it in directory]1, như sau
1
import os
2
directory = os.scandir['hello']
Phương thức này trả về một iterator. Chúng ta có thể sử dụng nó để tạo vòng lặp for để xem tất cả các tệp trong thư mục
1
entries = [it.name for it in directory]
2
print[entries]
Trong trường hợp đó, chúng tôi sẽ nhận được
1
['.nomedia', '1.txt', '2.txt', '3.txt', '4.txt', '5.txt', 'others']
Điều này cho thấy rằng chúng ta có năm. txt bên trong thư mục hello. Tuy nhiên, nó cũng chứa một số tệp và thư mục con khác
Bây giờ chúng ta sẽ lặp qua tất cả các tệp trong thư mục hello. Chúng ta có thể làm như vậy với sự trợ giúp của vòng lặp
entries = [it.name for it in directory]2 trong khi sử dụng câu lệnh
entries = [it.name for it in directory]3. Điều này sẽ tự động giải phóng tài nguyên khi chúng tôi thực thi mã trong khối này
1
import os1_______3_______
import os3
Vì chúng tôi muốn tìm kiếm Wolrd trong mỗi năm tệp trong thư mục, điều bình thường cần làm ở giai đoạn này là mở và đọc nội dung của từng tệp. Chúng tôi sẽ bỏ qua các thư mục bằng cách sử dụng phương thức
entries = [it.name for it in directory]4 và các tệp bắt đầu bằng ký tự
entries = [it.name for it in directory]5 bằng cách sử dụng phương thức
entries = [it.name for it in directory]6 trên tên tệp. Điều này cho phép chúng tôi chỉ đọc và ghi vào các tệp mà chúng tôi thực sự có ý định sửa đổi
Chúng tôi cũng mở tệp bằng phương thức
entries = [it.name for it in directory]7 ở chế độ
entries = [it.name for it in directory]8. Điều này cho phép chúng tôi đọc nội dung của tệp và sau đó ghi vào tệp sau khi thực hiện các thay đổi cần thiết
1
import os5
2
import os7
import os8_______2_______9
Bây giờ là một bước quan trọng, đặc biệt là khi nói về khớp mẫu—trong trường hợp của chúng ta, tìm kiếm Wolrd. Bước này sử dụng biểu thức chính quy. Trong Python, để sử dụng các biểu thức chính quy, chúng ta sẽ sử dụng mô-đun
entries = [it.name for it in directory]9
Chúng tôi sẽ sử dụng hai chức năng chính từ mô-đun này. Đầu tiên là
20
Biên dịch một mẫu biểu thức chính quy thành một đối tượng biểu thức chính quy, có thể được sử dụng để so khớp bằng các phương thức và của nó
Và thứ hai là
23, vì đã thay thế cách viết sai bằng cách viết đúng. Do đó, chúng tôi sẽ làm như sau
1
21_______3_______3_______3
Cuối cùng, chúng tôi muốn viết văn bản mới sau khi thay thế vào tệp của mình, như sau
1
25_______3_______
27
Để tất cả chúng cùng nhau
Trong phần này, hãy xem toàn bộ tập lệnh Python, sẽ tìm kiếm Word trong mỗi tệp và thay thế bằng World, sẽ trông như thế nào
1
29
22_______8
import os1
directory = os.scandir['hello']3
import os3
directory = os.scandir['hello']5
directory = os.scandir['hello']6__
directory = os.scandir['hello']7
directory = os.scandir['hello']8
19
10
11
12
13
14__
15_______1_______6_______1_______07_______1_______8_______01_________
Như chúng ta có thể thấy, Python giúp dễ dàng thực hiện các sửa đổi trên nhiều tệp bằng cách sử dụng vòng lặp for. Một phần quan trọng khác cần nhớ ở đây là việc sử dụng các biểu thức chính quy để so khớp mẫu
Nếu bạn muốn biết thêm về các vòng lặp của Python, hãy xem A Smooth Refresher on Python's Loops. Và, để biết thêm thông tin về các biểu thức chính quy, hãy kiểm tra Biểu thức chính quy trong Python
Bài đăng này đã được cập nhật với sự đóng góp từ Monty Shokeen. Monty là một nhà phát triển full-stack, người cũng thích viết hướng dẫn và tìm hiểu về các thư viện JavaScript mới