30/09/2018, 22:21
Close file là gì?
Em thực sự không hiểu close là gì và để làm gì cả? Ai có thể giải thích dễ hiểu giúp em được không ạ?
Bài liên quan
Em thực sự không hiểu close là gì và để làm gì cả? Ai có thể giải thích dễ hiểu giúp em được không ạ?
Mình không bên Python nhưng theo mình hiểu, close file lại để khi có gọi hoặc sử dụng file khác nó không bị lỗi , thế thôi
Trường hợp này:
Txt=open(tenfile).read()
thì nó không đóng được, có sao không ạ?Txt.close()
báo lỗi là kiểu như là không thể đóng được kiểu ‘read’ objectTxt.close()
lỗi là vìTxt
không phải là một đối tượng file (file object) mà chỉ là đối tượng bình thường.Txt=open(tenfile).read()
được ngầm hiểu là đọc nội dung của file objectopen(tenfile)
rồi lưu vào objectTxt
. Để rõ ràng khi mới lập trình bạn tránh viết tắt kiểu này, bởi sau này khi nhìn lại có khi bạn không rõ ý nghĩa câu lệnh như thế nào, để làm gì, nên là:Em học trên learnpythonthehardway thì có nói là close file cũng như File -> Save nghĩ mãi mà cũng chả hiểu close nó là cái gì? Em khó mà tập trung được nên mấy cái như vậy em chả nghỉ được gì cả, chỉ thêm nản thôi! Mong giải thích hộ em ạ!
Nếu vậy muốn đóng file thì chỉ cần đóng cái nào được gán = open(tên của file) thôi đúng không ạ?
> from sys import argv
> from os.path import exists
script, from_file, to_file = argv
print “Copying from %s to %s” % (from_file, to_file)
input = open(filename)
indata = input.read()
print “The input file is %d bytes long” % len(indata)
print “Does the output file exist? %r” % exists(to_file)
print “Ready, hit RETURN to continue, CTRL-C to abort.”
raw_input()
Như trong code trên thì em chỉ cần đóng out_file và input_file thôi đúng không ạ?Còn cái indata thì sao ạ?
Nếu như Txt với indata ở code trên chỉ là object bình thường thôi nên không đóng cũng chả sao đúng không ạ?
open('file.txt')
mở một connection từ chương trình của bạn đến file trên đĩakhi không đưa tham số mode (ví dụ như
open('file.txt', 'w')
thì mode = ‘w’ -> write, chế độ ghi ) thì mặc định là read. nhưng ở đây để đầy đủ hơn mình sẽ dùng chế độ ghi:đúng rồi, vì những cái không lưu vào biến thì sẽ bị garbage collection ngay tức khắc sau khi dùng xong (mà lúc đó cũng không close được vì biết close từ đâu)
những cái lưu vào biến thì phải close, vì nếu để đó sẽ tốn tài nguyên máy
Tại sao lại có close file ? Giải thích:
có 2 tình huống.
Tình huống 1: người dùng tạo file txt. VD: dùng phần mềm notepad++ để tạo file txt.
Khi tạo mới file txt thì báo cho hệ điều hành biết là đang mở 1 file.
Nhập nội dung vô xong đó nhấn nút lưu thì báo cho hệ điều hành biết là lưu file txt với tên này.
Khi đóng file txt thì báo cho hệ điều hành biết là không dùng file này nữa.
Tình huống 2: chương trình chạy tạo file, lưu và đóng(tự động).
Chương trình tạo file thì báo cho hệ điều hành biết là đang mở 1 file.
Khi lưu nội dung thì chương trình lấy nội dung được nhập lưu vào 1 nơi nào đó trong ổ cứng.
Khi đóng file thì báo cho hệ điều hành biết là không dùng file này nữa. Để tránh bị tràng bộ nhớ.
Tóm lại: khi mở 1 file để thao tác như đọc, lưu thì luôn luôn phải thực hiện thao tá đóng. Để báo cho hệ điều hành biết là không sử dụng file này nữa để tránh bị tràn bộ nhớ…
Txt=open(tenfile).read()
thì bạn không cần đóng file vì python đã tự làm việc này Đoạn code bạn đưa ở trên thì đóng out_file và input là đúng rồi, còn indata là một đối tượng bình thường dùng lưu nội dung file thôi chứ không phải là một đối tượng file. Còn ý nghĩa về việc close file, bạn có thể xem trả lời ở topic này:Thanks !!!
Thanks ,a có FB không ạ, Nếu được thì addfriend với em. Một số thứ em cần hỏi ạ!
Mình ít dùng FB. Có câu hỏi gì nên đặt trên này bạn ạ, trên đây nhiều người giỏi lắm họ sẽ cho bạn những câu trả lời tốt nhất với lại nhiều câu trả lời bạn sẽ có cách nhìn tổng quát hơn, mau “thấm” hơn.
Nội dung sẽ được lưu vào s và sẽ ko bị mất đi đúng ko ạ?
Cho em hỏi tiếp ạ, nếu muốn lưu trữ nội dung của file thì indata cần phải mở/đọc file thì mới lưu trữ được nội dung của file đúng không ạ? Nếu đã mở file ra thì cần phải close lại? em không hiểu chỗ này.Với lại khi đọc thì file sẽ được đưa ra bộ nhớ đệm rồi mới vào đĩa?Close là lưu và đóng !!,khi đọc , file từ bộ nhớ đệm được lưu nên đĩa.Do đó ,khi đọc cần phải close file ,ko phải là cần phải close file mà là lưu file( close thì lưu và close luôn rồi).
Đó là suy đoán của em mong anh chỉ bảo với ạ!
Đính chính lại khi đọc có cần phải close file không ạ?
khi đọc vẫn phải lưu, vì cho dù là đọc vẫn phải mở 1 connection từ file đến chương trình
giống như trên kia mình đã nói, nếu đã lưu vào biến thì phải close
không lưu vào biến thì python sẽ tự close
bạn có gõ nhầm “đọc” vs “ghi” ko vậy
Nguyên tắc là bạn mở một file ra, dù ở chế độ nào (
'r'
,'w'
,'a'
,…) thì vẫn phải đóng file lại. Nếu bạn dùng theo kiểuTxt=open(tenfile).read()
thì sau lệnh này python sẽ tự close file vì nó là garbage collector, kiểu này tuy gọn, không lo quên close file nhưng nếu có một ngoại lệ (exception) được ném (throw) ra thì bạn sẽ không bắt được để xử lý (handling). Còn dùng một đối tượng để tham chiếu (reference) tới file ví dụ :doi_tuong=open(tenfile)
thì file của bạn vẫn mở cho tới khi kết thúc chương trình, cho tới khi nào nó bắt gặpdoi_tuong.close()
thì file mới đóng. Cho nên bắt buộc bạn phải close file trong trường hợp này, nguyên nhân thì ở topic mình đã dẫn ở trên. Nên dùng kiểu này hơn bởi vì code của bạn sẽ dễ bảo trì và quản lý hơn so với trường hợp garbage collector ở trên.a có thể nói rõ từng bước để đọc 1 file ko ạ?em vẫn chưa thể hình dung được. Mong a thông cảm ạ!
làm sao để biết nó là garbage collector ạ?
Em còn câu hỏi cuối ạ, như trong code dài dài phía trên, thì là trường hợp dùng một đối tượng để tham chiếu tới file đúng không ạ? indata để có thể lưu trữ được nội dung của file thì phải mở/đọc thì mới lấy được nội dung của file đúng không ạ?Vậy sao khi em close file rồi mà vẫn có thể đọc file thông qua indata