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ụcTạ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]
passsearchText[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]
passsearchText[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]
passsearchText[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 os1_______9_______
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 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 os5
2
import os7
import os8
import os9
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_______9_______
23
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_______9_______
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
2
import os8
import os1
directory = os.scandir['hello']3
import os3
directory = os.scandir['hello']5
directory = os.scandir['hello']6
directory = os.scandir['hello']7_______10_______8
directory = os.scandir['hello']9
10
11
12
13
14_______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