Làm cách nào để mở nhiều tệp bằng python mở?

Đô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 os
1_______3_______
import os
3

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 os
5
2
import os
7
import os
8_______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à

2
0

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à

2
3, 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
2
1_______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
2
5_______3_______
2
7

Để 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
2
9
2
2_______8
import os
1
directory = os.scandir['hello']
3
import os
3
directory = os.scandir['hello']
5
directory = os.scandir['hello']
6__
directory = os.scandir['hello']
7
directory = os.scandir['hello']
8
1
9
1
0
1
1
1
2
1
3
1
4__
1
5_______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

Chủ Đề