Làm cách nào để đọc nhiều tệp văn bản trong một thư mục trong python?

Mô-đun hệ điều hành trong Python cung cấp các chức năng để tương tác với hệ điều hành. Hệ điều hành, đi kèm với các mô-đun tiện ích tiêu chuẩn của Python. Mô-đun này cung cấp một cách di động để sử dụng chức năng phụ thuộc vào hệ điều hành

import os

Lấy thư mục làm việc hiện tại

current_path = os.getcwd[]
current_path

đầu ra. ‘E. \\jupyter-notebook-workspace'

Thư mục làm việc hiện tại của tôi là E. //jupyter-notebook-không gian làm việc. Nhưng tôi muốn tìm kiếm văn bản trong thư mục khác

Khai báo đường dẫn muốn tìm văn bản

Tôi muốn tìm kiếm văn bản trong đường dẫn này “G. /dữ liệu/đường dẫn”. Trong đường dẫn này tôi có một số tệp và thư mục

path = 'G:/data/input'
path

đầu ra. ‘G. /dữ liệu/đầu vào'

Tạo một hàm và liệt kê thư mục

Tạo một chức năng và thay đổi thư mục mà bạn muốn tìm kiếm văn bản. Sau đó liệt kê thư mục và in các tập tin

hệ điều hành. chdir[path] — Thay đổi thư mục làm việc hiện tại thành đường dẫn đã chỉ định

hệ điều hành. listdir[đường dẫn='. ’] —

Trả về danh sách chứa tên của các mục trong thư mục được cung cấp bởi đường dẫn. Danh sách này theo thứ tự tùy ý và không bao gồm các mục đặc biệt ‘. ' và '. ' ngay cả khi chúng có mặt trong thư mục. Nếu một tệp bị xóa khỏi hoặc được thêm vào thư mục trong khi gọi hàm này, liệu tên của tệp đó có được đưa vào hay không là không xác định

def searchText[path]:

os.chdir[path]
files = os.listdir[]
print[files]
pass
searchText[path]

đầu ra. ['001–001-nhận-định-với-bert. ipynb', '002–001-triển khai-machine-learning-model-with-flask-on-heroku. ipynb’, ‘add-signup-form-in-react-native-mobile-app-part-7. ipynb’, ‘xây dựng-mạng-nơ-ron-với-pytorch. ipynb’, ‘call-graphql-api-in-react-native-mobile-app-part-5. ipynb’, ‘bắt-ngày-điện-thoại-và-e-mail-từ-văn-bản-với-biểu-thức-thông-thường-trong-python. ipynb’, ‘phân loại-hình-ảnh-của-quần-áo-với-mạng nơ-ron. ipynb’, ‘màu sắc và hình dạng. ipynb’, ‘mẫu’]

Chúng tôi có danh sách các tệp và thư mục

In từng tệp từ thư mục được liệt kê

def searchText[path]:

os.chdir[path]
files = os.listdir[]
#print[files]
for file_name in files:
print[file_name]

pass
searchText[path]

đầu ra

Lấy đường dẫn tuyệt đối của tên tệp

def searchText[path]:

os.chdir[path]
files = os.listdir[]
#print[files]
for file_name in files:
#print[file_name]

abs_path = os.path.abspath[file_name]
print["Absolute path of the file:", abs_path]


pass
searchText[path]

đầu ra

Bạn có thể thấy, chúng tôi có thư mục mẫu. Trong thư mục đó cũng vậy, chúng ta phải liệt kê các tệp. Để làm được điều đó, chúng ta cần thực hiện tìm kiếm đệ quy

Đô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_______9_______
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 pháp

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
import os
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_______9_______
2
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_______9_______
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
import os
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_______10_______8
directory = os.scandir['hello']
9
1
0
1
1
1
2
1
3
1
4_______7_______5_______7_______6_______7_______7_______7_______ 9_______

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ủ Đề