Python là ngôn ngữ lập trình được diễn giải và nhập động phổ biến để xây dựng các dịch vụ web, ứng dụng dành cho máy tính để bàn, tập lệnh tự động hóa và các dự án máy học. Các lập trình viên thường phải truy cập hệ thống tệp của hệ điều hành khi họ làm việc với các dự án phần mềm dựa trên Python
Ví dụ: chúng tôi sử dụng tệp văn bản làm đầu vào, ghi tệp văn bản làm đầu ra và xử lý tệp nhị phân thường xuyên. Giống như bất kỳ ngôn ngữ lập trình đa năng, phổ biến nào khác, Python cũng cung cấp các tính năng xử lý tệp đa nền tảng. Python cung cấp các tính năng xử lý tệp thông qua một số chức năng sẵn có và mô-đun tiêu chuẩn
Trong bài viết này, tôi sẽ giải thích mọi thứ bạn cần biết về xử lý tệp Python, bao gồm
điều kiện tiên quyết
Trước khi bắt đầu với hướng dẫn, hãy đảm bảo rằng bạn đã cài đặt trình thông dịch Python 3. Nếu không, hãy cài đặt trình thông dịch Python mới nhất từ các bản phát hành chính thức. Bạn cũng có thể sử dụng các đoạn mã của hướng dẫn này trong các dự án Python hiện có của mình
Đọc tệp trong Python
Là hoạt động đầu tiên, hãy viết một số mã để đọc tệp văn bản. Trước tiên chúng ta cần tạo một đối tượng tệp để đọc tệp
Python cung cấp hàm
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]8 sẵn có để tạo một đối tượng tệp với một số chế độ, chẳng hạn như chế độ đọc, chế độ ghi, v.v. Tạo một tệp văn bản có tên
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]9 và nhập nội dung sau
Programming languages C C++ Python JavaScript Go
Bây giờ, tạo một tệp mới có tên
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]0 và thêm đoạn mã sau
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]
Dòng đầu tiên của đoạn mã trên tạo đối tượng tệp
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]1 với tên tệp đã cho. Hàm
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]8 sẵn có tạo trình xử lý tệp bằng chế độ đọc vì chúng tôi đã cung cấp cờ
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]3 thông qua tham số thứ hai
Đảm bảo gọi phương thức
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]4 để giải phóng tài nguyên sau khi sử dụng tệp. Phương thức
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]5 trả về nội dung tệp, vì vậy bạn sẽ thấy nội dung sau khi thực thi đoạn mã trên, như hình bên dưới
Phương pháp
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]5 đọc toàn bộ tệp cùng một lúc. Nếu bạn không muốn đọc tất cả cùng một lúc, bạn có thể chỉ định kích thước byte với tham số của phương thức
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]5. Ví dụ: đoạn mã sau chỉ đọc 11 byte đầu tiên
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]
Bạn sẽ thấy từ đầu tiên [“Lập trình”] là đầu ra — vì từ đầu tiên có 11 chữ cái và kích thước của một chữ cái bằng một byte trong bảng mã ASCII. Nếu bạn in lại kết quả của
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]8, bạn sẽ thấy 11 byte tiếp theo [“ngôn ngữ\n”] vì con trỏ tệp đã di chuyển 11 vị trí với lệnh gọi phương thức
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]8 trước đó. Bạn có thể đặt lại con trỏ tệp về đầu bằng cách sử dụng phương pháp
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]0, như minh họa trong ví dụ sau
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]
Trong hầu hết các trường hợp, thật dễ dàng để xử lý từng dòng nội dung tệp. Bạn không cần phải tự triển khai cơ chế đọc tệp theo dòng — Python cung cấp các tính năng sẵn có để đọc tệp theo từng dòng. Bạn có thể đọc từng dòng một tệp bằng vòng lặp
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]1 và phương pháp
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]2, như minh họa bên dưới
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]
Có thể lấy số dòng hiện tại bằng vòng lặp
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]3 vì phương thức
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]2 sẽ trả về các dòng sử dụng kiểu danh sách. Đoạn mã sau sẽ in nội dung dòng với số dòng tương ứng
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]
Viết tệp bằng Python
Trước đó, chúng tôi đã tạo các đối tượng tệp với chế độ đọc bằng cách sử dụng cờ
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]3. Không thể ghi tệp ở chế độ đọc, vì vậy chúng tôi phải sử dụng chế độ ghi [
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]6] để ghi tệp
Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơn
Cũng có thể kích hoạt đồng thời cả hai chế độ đọc và ghi bằng cách sử dụng cờ
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]7 hoặc
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]8;
Để bắt đầu với việc ghi tệp, hãy nhập văn bản sau vào
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]9 hiện tại bằng cách viết một số mã Python
Programming languages Rust Ruby TypeScript Dart Assembly
Sử dụng tập lệnh sau để cập nhật
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]9 với nội dung trên
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]
Ở đây, chúng tôi đã xác định nội dung tệp văn bản bằng cú pháp chuỗi nhiều dòng của Python và chúng tôi đã viết nội dung vào tệp bằng phương thức
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]2. Đảm bảo sử dụng chế độ ghi với cờ
myFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]6 — nếu không, thao tác ghi sẽ không thành công với ngoại lệ
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]4
Đôi khi, chúng ta thường phải thêm nội dung mới vào một tệp hiện có. Trong những trường hợp đó, đọc và viết toàn bộ nội dung không phải là cách tiếp cận tốt do mức tiêu thụ tài nguyên cao hơn. Thay vào đó, chúng ta có thể sử dụng chế độ chắp thêm [
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]5]
Nhìn vào đoạn mã sau. Nó sẽ thêm một ngôn ngữ lập trình mới vào danh sách trong
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]9
myFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
Đoạn mã trên thêm một ký tự dòng mới [
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]7] và một từ mới vào tệp hiện có mà không ghi toàn bộ nội dung tệp. Do đó, chúng ta sẽ thấy một mục mới trong danh sách ngôn ngữ lập trình của mình. Hãy thử thêm nhiều mục hơn và xem điều gì sẽ xảy ra
Các bài viết hay khác từ LogRocket
- Đừng bỏ lỡ một khoảnh khắc nào với The Replay, một bản tin được tuyển chọn từ LogRocket
- Tìm hiểu cách Galileo của LogRocket loại bỏ tiếng ồn để chủ động giải quyết các sự cố trong ứng dụng của bạn
- Sử dụng useEffect của React để tối ưu hóa hiệu suất ứng dụng của bạn
- Chuyển đổi giữa nhiều phiên bản của Node
- Khám phá cách tạo hoạt ảnh cho ứng dụng React của bạn với AnimXYZ
- Khám phá Tauri, một khuôn khổ mới để xây dựng các tệp nhị phân
- So sánh NestJS với. Thể hiện. js
Đọc thuộc tính tệp trong Python
Ngoài nội dung tệp gốc, một tệp trên đĩa sẽ chứa một số siêu dữ liệu hoặc thuộc tính tệp, bao gồm những thứ như kích thước, thời gian sửa đổi lần cuối, thời gian truy cập lần cuối, v.v.
Nhìn vào mã tệp bên dưới, hiển thị kích thước tệp, lần truy cập cuối cùng và lần sửa đổi cuối cùng
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]
Hàm
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]8 trả về một đối tượng kết quả thống kê với nhiều chi tiết thuộc tính tệp. Ở đây, chúng tôi đã sử dụng
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]9 để lấy kích thước tệp,
Programming languages Rust Ruby TypeScript Dart Assembly0 để lấy dấu thời gian được truy cập tệp cuối cùng và
Programming languages Rust Ruby TypeScript Dart Assembly1 để lấy dấu thời gian được sửa đổi lần cuối. Đối tượng kết quả thống kê có thể khác nhau tùy theo hệ điều hành của bạn. Ví dụ: trên hệ điều hành Windows, bạn có thể truy xuất các thuộc tính tệp dành riêng cho Windows thông qua khóa
Programming languages Rust Ruby TypeScript Dart Assembly2
Nếu bạn chỉ cần lấy kích thước tệp, bạn có thể sử dụng phương pháp
Programming languages Rust Ruby TypeScript Dart Assembly3 mà không cần truy xuất tất cả siêu dữ liệu, như được hiển thị trong đoạn mã sau
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]0
Tạo thư mục Python mới
Python cung cấp hàm
Programming languages Rust Ruby TypeScript Dart Assembly4 để tạo một thư mục. Đoạn mã sau tạo
Programming languages Rust Ruby TypeScript Dart Assembly5 trong thư mục làm việc hiện tại
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]1
Nếu bạn cố gắng tạo nhiều thư mục theo cách đệ quy với đoạn mã trên, nó sẽ thất bại. Ví dụ: bạn không thể tạo
Programming languages Rust Ruby TypeScript Dart Assembly6 cùng một lúc vì nó yêu cầu tạo nhiều thư mục. Trong những trường hợp đó, chức năng
Programming languages Rust Ruby TypeScript Dart Assembly7 sẽ giúp chúng tôi, như hình bên dưới
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]2
Đọc nội dung thư mục Python
Python cũng cung cấp một API dễ dàng để liệt kê nội dung thư mục thông qua hàm
Programming languages Rust Ruby TypeScript Dart Assembly8. Đoạn mã sau liệt kê tất cả các tệp và thư mục trong thư mục làm việc hiện tại của bạn
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]3
Khi bạn thực thi đoạn script trên, nó sẽ hiển thị các mục trong thư mục hiện tại của bạn, như hình bên dưới
Hãy thử thực thi tập lệnh từ một thư mục khác. Sau đó, nó sẽ hiển thị các mục của thư mục cụ thể đó vì chúng tôi sử dụng hàm
Programming languages Rust Ruby TypeScript Dart Assembly9 để lấy thư mục làm việc hiện tại
Đôi khi chúng ta cần liệt kê nội dung thư mục theo cách đệ quy. Hàm
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]0 giúp chúng ta liệt kê thư mục đệ quy. Đoạn mã sau liệt kê tất cả các mục của thư mục làm việc hiện tại theo cách đệ quy
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]4
Hàm
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]0 có triển khai đệ quy bên trong. Nó trả về ba giá trị cho mỗi mục
- Nguồn gốc
- thư mục con
- Mục nhập tệp
Ở đây, chúng tôi đã sử dụng các biến
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]2,
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]3 và
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]4 tương ứng, với một vòng lặp for để nắm bắt tất cả các mục nhập
Xóa tệp hoặc thư mục trong Python
Chúng ta có thể sử dụng hàm
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]5 để xóa tệp. Có thể sử dụng hàm
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]6 trước
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]5 để ngăn chặn các trường hợp ngoại lệ. Nhìn vào đoạn mã ví dụ sau
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]5
Thư viện chuẩn Python cũng cung cấp hàm
myFile = open["myFile.txt", "w"] content = """Programming languages Rust Ruby TypeScript Dart Assembly""" myFile.write[content] myFile.close[]8 để xóa một thư mục. Nó hoạt động tương tự như
Programming languages Rust Ruby TypeScript Dart Assembly4 và sẽ không xóa thư mục nếu thư mục cụ thể đó có một số mục nhập. Trước tiên, hãy thử xóa một thư mục có mã sau
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]6
Đoạn mã trên sẽ báo lỗi nếu
Programming languages Rust Ruby TypeScript Dart Assembly5 chứa các thư mục con hoặc tệp. Sử dụng đoạn mã sau để xóa một thư mục theo cách đệ quy
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]7
Thực hiện tìm kiếm tệp trong Python
Khi chúng tôi làm việc với các tập lệnh tự động hóa, đôi khi chúng tôi cần thực hiện tìm kiếm tệp trên đĩa. Ví dụ: các lập trình viên thường cần tìm tệp nhật ký, tệp hình ảnh và các tệp văn bản khác nhau thông qua tập lệnh Python của họ. Có một số cách tiếp cận khác nhau để thực hiện tìm kiếm tệp trong Python
- Tìm tất cả các mục nhập bằng hàm
Programming languages Rust Ruby TypeScript Dart Assembly
8 và kiểm tra từng mục nhập với điều kiệnmyFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
2 bên trong vòng lặpmyFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
3 - Tìm đệ quy tất cả các mục nhập bằng hàm
myFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
4 và xác thực từng mục nhập bằng điều kiệnmyFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
2 bên trong vòng lặpmyFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
3 - Truy vấn tất cả các mục nhập bằng hàm
myFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]
7 và chỉ lấy các mục nhập bạn cần
Nhìn chung, cách tiếp cận thứ ba là tốt nhất cho hầu hết các kịch bản vì nó có hỗ trợ lọc sẵn, hiệu suất rất tốt và yêu cầu mã tối thiểu từ phía nhà phát triển [thêm Pythonic]. Hãy triển khai tìm kiếm tệp với mô-đun toàn cục Python
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]8
Đoạn mã trên liệt kê tất cả các tệp nguồn Python trong thư mục hiện tại theo cách đệ quy. Hai dấu hoa thị đầu tiên [
myFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]8] trong biến truy vấn hướng dẫn Python tìm kiếm mọi thư mục con, trong khi dấu hoa thị cuối cùng đề cập đến bất kỳ tên tệp nào
Chạy đoạn script trên. Bạn sẽ thấy các tệp nguồn Python, như hình bên dưới
Cố gắng tìm kiếm các loại tệp khác nhau bằng cách thay đổi biến
myFile = open["myFile.txt", "a"] myFile.write["\nBash"] myFile.close[]9
Xử lý tệp nhị phân trong Python
Trước đó, chúng tôi đã xử lý tệp văn bản. Hàm
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]8 sẵn có tạo các đối tượng tệp với chế độ văn bản [
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]1] theo mặc định. Không thể xem các tệp phi văn bản như tệp hình ảnh, tệp zip và tệp video dưới dạng tệp văn bản thuần túy — vì không có tệp nhị phân câu tiếng Anh nào có thể đọc được. Do đó, chúng ta phải coi các tệp nhị phân là tệp không phải văn bản thông qua xử lý ở cấp độ byte [hoặc cấp độ bit]
Để bắt đầu với việc xử lý tệp nhị phân, hãy viết một tệp nhị phân có một số byte. Chúng tôi sẽ lưu các byte sau vào
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]2
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]9
Để đơn giản, chúng ta có thể biểu diễn các byte trên bằng các giá trị thập phân sau tương ứng
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]0
Bây giờ, hãy thêm đoạn mã sau vào tệp nguồn Python của bạn và thực thi nó để tạo tệp nhị phân
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]1
Ở đây, chúng ta đã truyền một thể hiện mảng byte cho phương thức
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]2 của đối tượng tệp. Ngoài ra, lưu ý rằng chúng tôi đã sử dụng chế độ nhị phân [______39_______4] để tạo đối tượng tệp. Sau khi thực hiện đoạn mã trên, hãy mở
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]2 mới tạo bằng trình soạn thảo văn bản yêu thích của bạn. Bạn sẽ thấy kết quả sau
Chúng tôi đã nhận được “Python” làm đầu ra vì các byte của mảng byte đại diện cho các ký tự ASCII đã biết. Ví dụ:
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]6 [
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]7] đại diện cho chữ cái
import os, time stat = os.stat["myFile.txt"] print["Size: %s bytes" % stat.st_size] print["Last accessed: %s" % time.ctime[stat.st_atime]] print["Last modified: %s" % time.ctime[stat.st_mtime]]8 trong bảng mã ASCII. Mặc dù chúng tôi đã lưu văn bản có thể đọc được bên trong tệp nhị phân, nhưng hầu hết tất cả các tệp nhị phân đều chứa các luồng byte không thể đọc được. Hãy thử mở tệp hình ảnh qua trình soạn thảo văn bản
Bây giờ chúng ta có thể thấy thao tác đọc tệp nhị phân trong mã ví dụ sau
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]2
Python trả về byte bằng phương thức
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]5 cho chế độ nhị phân. Ở đây, chúng tôi đã chuyển đổi byte thành một thể hiện
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]00 bằng cách sử dụng hàm tạo
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]00
Tạo và giải nén từ kho lưu trữ Python
Các lập trình viên thường sử dụng các tệp lưu trữ với các ứng dụng web, dịch vụ web, ứng dụng dành cho máy tính để bàn và các chương trình tiện ích dựa trên Python để xuất hoặc nhập nhiều tệp cùng một lúc. Ví dụ: nếu bạn đang xây dựng trình quản lý tệp dựa trên web, thì bạn có thể cung cấp tính năng để người dùng tải xuống nhiều tệp cùng lúc thông qua tệp zip được tạo theo chương trình
Thư viện tiêu chuẩn Python cung cấp API xử lý tệp lưu trữ thông qua mô-đun
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]02. Đầu tiên, hãy tạo một kho lưu trữ với nội dung của
Programming languages Rust Ruby TypeScript Dart Assembly5. Nhìn vào đoạn mã sau. Đảm bảo tạo
Programming languages Rust Ruby TypeScript Dart Assembly5 và thêm một số tệp vào đó trước khi chạy đoạn mã
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]3
Bạn có thể giải nén tệp lưu trữ vào
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]05 bằng đoạn mã sau
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]4
Sao chép và di chuyển tập tin
Mô-đun
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]02 cũng cung cấp các chức năng API đa nền tảng để sao chép và di chuyển tệp. Nhìn vào các ví dụ sau
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]5
Các phương pháp hay nhất về xử lý tệp Python
Các lập trình viên tuân theo các thực hành mã hóa khác nhau. Tương tự, các lập trình viên Python cũng tuân theo các cách viết mã khác nhau khi họ xử lý các tệp
Ví dụ: một số lập trình viên sử dụng khối thử cuối cùng và đóng trình xử lý tệp theo cách thủ công. Một số lập trình viên cho phép trình thu gom rác đóng trình xử lý tệp bằng cách bỏ qua lệnh gọi phương thức
myFile = open["myFile.txt"] print[myFile.read[11]] # Programming print[myFile.read[10]] # languages myFile.seek[0] # Sets file cursor to the beginning print[myFile.read[11]] # Programming myFile.close[]4 — đây không phải là một cách làm tốt. Trong khi đó, các lập trình viên khác sử dụng cú pháp
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]08 để làm việc với các trình xử lý tệp
Trong phần này, tôi sẽ tóm tắt một số phương pháp hay nhất để xử lý tệp trong Python. Trước tiên, hãy xem đoạn mã sau tuân theo các phương pháp hay nhất về xử lý tệp
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]6
Ở đây, chúng tôi đã sử dụng từ khóa
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]08 để đóng hoàn toàn trình xử lý tệp. Ngoài ra, chúng tôi xử lý các trường hợp ngoại lệ có thể xảy ra bằng khối thử ngoại trừ. Trong khi bạn đang làm việc với việc xử lý tệp Python, có thể chắc chắn rằng mã của bạn có các điểm sau
- Không bao giờ bỏ qua các ngoại lệ — đặc biệt là với các quy trình Python chạy dài. Tuy nhiên, bạn có thể bỏ qua các ngoại lệ đối với các tập lệnh tiện ích đơn giản vì các ngoại lệ chưa được xử lý sẽ ngăn các tập lệnh tiện ích tiếp tục
- Nếu bạn không sử dụng cú pháp
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]
08, hãy đảm bảo đóng các trình xử lý tệp đã mở đúng cách. Trình thu gom rác của Python sẽ dọn sạch các trình xử lý tệp chưa được đóng, nhưng tốt nhất là đóng một trình xử lý tệp thông qua mã của chúng tôi để tránh sử dụng tài nguyên không mong muốn - Đảm bảo thống nhất các cú pháp xử lý tệp trong cơ sở mã của bạn. Ví dụ: nếu bạn sử dụng từ khóa
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]
08 để xử lý tệp, hãy đảm bảo sử dụng cùng một cú pháp cho tất cả những nơi bạn đang xử lý tệp - Tránh mở lại cùng một tệp khi bạn đọc hoặc ghi bằng nhiều trình xử lý. Thay vào đó, hãy sử dụng các phương pháp
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]
12 vàmyFile = open["myFile.txt", "r"] for line in myFile.readlines[]: print[line] myFile.close[]
0, như hình bên dưới
myFile = open["myFile.txt", "r"] print[myFile.read[11]] # Programming myFile.close[]7
Nội dung trên lưu một chuỗi vào tệp đầu tiên. Sau đó, nó đọc lại nội dung mới được thêm vào bằng cách đặt lại bộ đệm bên trong. Phương thức
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]12 xóa dữ liệu được lưu tạm thời trong bộ nhớ, vì vậy lần đọc tiếp theo sẽ trả về nội dung mới được thêm vào. Ngoài ra, chúng ta cần sử dụng lệnh gọi phương thức
myFile = open["myFile.txt", "r"] # or open["myFile.txt"] print[myFile.read[]] myFile.close[]15 để đặt lại con trỏ về đầu vì phương thức
myFile = open["myFile.txt", "r"] for i, line in enumerate[myFile.readlines[]]: print[i, line] # line number and content myFile.close[]2 đặt nó về cuối
Phần kết luận
Python cung cấp một cú pháp đơn giản cho các lập trình viên. Vì vậy, hầu hết các thao tác với tệp đều dễ dàng thực hiện. Tuy nhiên, Python có một số vấn đề với thiết kế thư viện tiêu chuẩn, do đó, có nhiều hàm API cho cùng một thứ. Do đó, bạn phải chọn mô-đun tiêu chuẩn phù hợp nhất theo yêu cầu của bạn
Ngoài ra, Python là một ngôn ngữ chậm so với các ngôn ngữ lập trình phổ biến khác. Với suy nghĩ này, hãy đảm bảo tối ưu hóa tập lệnh Python của bạn mà không sử dụng quá nhiều tài nguyên. Ví dụ: bạn có thể tối ưu hóa hiệu suất bằng cách xử lý từng dòng tệp văn bản lớn mà không cần xử lý toàn bộ nội dung cùng một lúc
Trong hướng dẫn này, chúng tôi đã thảo luận về xử lý tệp văn bản chung và xử lý tệp nhị phân. Nếu bạn cần xử lý các định dạng tệp cụ thể, bạn nên chọn một thư viện hoặc mô-đun chuẩn tốt hơn. Ví dụ: bạn có thể sử dụng mô-đun chuẩn csv để xử lý tệp CSV và thư viện PyPDF2 để xử lý tệp PDF. Ngoài ra, mô-đun chuẩn pickle giúp bạn lưu trữ [và tải] các đối tượng dữ liệu Python bằng các tệp