Đối với bất kỳ ai làm việc với Python, việc tương tác với các tệp sẽ không thể tránh khỏi. Phương pháp đơn giản nhất để mở và đóng tệp dưới đây
file = open['example_file.txt'] # open the example file file.close[] # close it
Learn Data Science with
Một trong những lỗi phổ biến nhất mà mọi người mắc phải khi sử dụng tệp trong Python là không đóng chúng sau đó. Trong bài học này, chúng ta sẽ xem xét một số vấn đề gây ra khi để tệp mở và cách chúng ta có thể tránh những vấn đề này bằng cách sử dụng phương pháp hay nhất đã được thiết lập
Tại sao phải đóng tệp?
Không đóng tệp sau khi tương tác không chỉ gây lãng phí tài nguyên chương trình mà còn có thể ngăn các tương tác tệp khác và có thể dẫn đến sự không nhất quán khi chạy tập lệnh của bạn trên các phiên bản Python khác nhau. Để các tệp mở cũng được nhiều người coi là một thói quen xấu và tốt nhất là bạn nên sớm hình thành thói quen tốt
ví dụ 1. Không đóng chính xác
Hãy tưởng tượng bạn có một tệp, được gọi là tệp_1. txt, hãy lưu trữ trong cùng thư mục với tập lệnh Python của bạn. Tệp này chứa văn bản "Đây là tệp văn bản 1"
Bạn muốn đọc tệp bằng Python, hiển thị văn bản và nối thêm một dòng mới để đánh dấu rằng bạn đã đọc tệp văn bản. Quá trình này được hiển thị [không chính xác] bên dưới
file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Ngoài
This is file 1 text This is file 1 text and we have read it.
Learn Data Science with
Các tập tin đã được đóng một cách chính xác, phải không?
Trong ví dụ này, chúng tôi chỉ đóng tệp sau lần mở gần đây nhất. Đối với một số phiên bản Python, mã được sử dụng có thể không ghi chính xác văn bản được nối vì tệp chưa được đóng sau khi hoàn thành thao tác. Để chứng minh điều này, hãy quan sát điều gì sẽ xảy ra nếu chúng ta cố gắng đóng từng tệp riêng lẻ ở cuối như một giải pháp
f1 = open['file_1.txt','r'] print[f1.read[]] f2 = open['file_1.txt', 'a'] f2.write[' and we have read it.'] f3 = open['file_1.txt','r'] print[f3.read[]] f1.close[] f2.close[] f3.close[]
Learn Data Science with
Ngoài
This is file 1 text This is file 1 text
Learn Data Science with
Chúng ta có thể thấy rằng việc thêm vào tệp từ
2 không được phản ánh trongfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
3file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Mã hóa như thế này cũng có khả năng làm hỏng tệp, khiến tệp không được đọc hoặc sử dụng lại trong tương lai. Ví dụ này đơn giản, nhưng nếu bạn đang viết một tập lệnh có thêm thông tin bổ sung vào một tệp dài chứa đầy dữ liệu khách hàng có giá trị hoặc dữ liệu mất hàng tháng để tìm kiếm trên web, thì tệp bị hỏng sẽ trở thành một vấn đề tốn kém
Để khắc phục ví dụ này, chúng tôi cần đảm bảo đóng tệp sau khi ghi trước khi thử đọc lại
f1 = open['file_1.txt','r'] print[f1.read[]] f1.close[] f2 = open['file_1.txt', 'a'] f2.write[' and we have read it.'] f2.close[] f3 = open['file_1.txt','r'] print[f3.read[]] f3.close[]
Learn Data Science with
Ngoài
This is file 1 text This is file 1 text and we have read it.
Learn Data Science with
Một cách thay thế dễ dàng hơn để xử lý thủ công
4 cho mỗi tệp là sử dụng trình quản lý bối cảnhfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
ví dụ 2. Trình quản lý bối cảnh
Để đóng thuộc tính tệp, giải pháp đơn giản nhất tuân theo các phương pháp hay nhất là sử dụng cái được gọi là câu lệnh
5 bất cứ khi nào mở tệp. Mẫu này còn được gọi là sử dụng trình quản lý ngữ cảnh, một khái niệm cơ bản trong Pythonfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Dưới đây là một ví dụ về việc sử dụng câu lệnh
5 để đảm bảo các tệp được đóngfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
with open['file_1.txt','r'] as f: print[f.read[]] with open['file_1.txt', 'a'] as f: f.write[' and we have read it.'] with open['file_1.txt','r'] as f: print[f.read[]]
Learn Data Science with
Ngoài
This is file 1 text and we have read it. This is file 1 text and we have read it. and we have read it.
Learn Data Science with
Mã được cập nhật cung cấp chức năng tương tự với yêu cầu viết mã ít hơn. Sử dụng câu lệnh
7 sẽ tự động đóng tệp sau khi hoàn thành khốifile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Việc sử dụng trình quản lý ngữ cảnh không chỉ giúp bạn không phải nhớ đóng tệp theo cách thủ công mà còn giúp người khác đọc mã của bạn dễ dàng biết chính xác chương trình đang sử dụng tệp như thế nào
Sử dụng
7 thường là lựa chọn đúng đắn, nhưng có thể có những tình huống mà dự án của bạn có thể yêu cầu đóng tệp theo cách thủ côngfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Lỗi phạm vi trình quản lý bối cảnh
Khi sử dụng trình quản lý bối cảnh, có một số lỗi có thể xảy ra. Một ví dụ về điều này là một
9. Hãy xem xét mã dưới đâyfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
with open['file_2.txt', 'a'] as f: message = 'This is the file 2 text' f.write[message]
Learn Data Science with
Ngoài
0file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Lỗi này xảy ra do chúng tôi đã sử dụng thao tác tệp
0 bên ngoài phạm viThis is file 1 text This is file 1 text and we have read it.
Learn Data Science with
7. Vì trình quản lý bối cảnh tự động đóng tệp sau khi thực thi mã thụt lề, nên Python không thể thực hiện bất kỳ thao tác tệp nào tiếp theo. Chúng ta có thể dễ dàng khắc phục sự cố này bằng cách giữ mọi thứ trong phạm vifile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
7, như vậyfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
1file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Tập lệnh mới thực thi thành công, ghi thông báo vào tệp trước khi đóng tệp
Bản tóm tắt
Bất kỳ ai làm việc với Python rất có thể sẽ cần phải làm việc nhiều với các tệp. Một phần thiết yếu của tương tác tệp là đảm bảo đóng chúng khi bạn hoàn thành
Để các tệp mở có thể gây ra nhiều sự cố, đặc biệt là trong các dự án lớn dựa trên nhiều loại tệp
Như chúng ta đã thảo luận, một cách đơn giản để tránh các rắc rối mà việc để tệp mở có thể gây ra là mở tệp của bạn bằng trình quản lý ngữ cảnh, trình quản lý này sẽ tự động đóng tệp cho bạn. Làm theo mẫu này sẽ giúp bạn tiết kiệm một công việc đồng thời ngăn ngừa lãng phí tài nguyên và sự không nhất quán của phiên bản. Quan trọng nhất, việc sử dụng các câu lệnh
5 sẽ giúp mã của bạn trông rõ ràng và chuyên nghiệp hơnfile = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file = open['file_1.txt', 'a'] # file is opened in append [a] mode file.write[' and we have read it.'] file = open['file_1.txt','r'] # file is opened in read [r] mode print[file.read[]] file.close[]
Learn Data Science with
Bắt đầu học miễn phí
Nhận thông tin cập nhật trong hộp thư đến của bạn
Tham gia cùng hơn 7.500 người học khoa học dữ liệu
Bài viết gần đây
Ưu đãi khóa học tốt nhất cho Thứ Sáu Đen và Thứ Hai Điện Tử 2022Hàm sigmoidchấm sản phẩm7 khóa học về trí tuệ nhân tạo [AI] tốt nhất năm 2023Nhận thông tin cập nhật trong hộp thư đến của bạn
Tham gia cùng hơn 7.500 người học khoa học dữ liệu
Gặp gỡ các tác giả
Nhà khoa học dữ liệu Alfie Grace
Alfie tốt nghiệp Thạc sĩ Kỹ thuật Cơ khí tại Đại học College London. Anh ấy hiện đang làm Nhà khoa học dữ liệu tại Square Enix. Tìm anh ấy trên LinkedIn