2 回答

TA貢獻1796條經驗 獲得超7個贊
首先要了解的是,當您執行 textFile.write 時,不確定是否會立即寫入文件。這是為了通過將數據首先放入緩沖區來提高寫入效率,只有當緩沖區已滿或調用刷新或文件關閉(內部執行刷新)時,緩沖區才會寫入文件。
所以原因是不適用于兩個不同的變量名稱是因為寫操作從未真正發生在該行之前textFile_1.close()
它使用相同變量名“工作”的原因是,當您重新綁定textFile = open(filename)
以前綁定到的文件時textFile
,現在沒有在任何地方引用它,因此垃圾收集器將其刪除。當文件句柄被刪除時,數據被寫入文件,因此您可以在之后讀取它。
另外,在處理文件時應該使用 with open 習慣用法:
見下文,FileDebug 包裝器向您顯示文件何時被刪除以及數據何時被寫入。
class FileDebug:
? ? def __init__(self, f, name):
? ? ? ? self.f = f
? ? ? ? self.name = name
? ? def close(self):
? ? ? ? print(f"Closing file (var: {self.name})")
? ? ? ? self.f.close()
? ? def write(self, *args, **kwargs):
? ? ? ? self.f.write(*args, **kwargs)
? ? def read(self, *args, **kwargs):
? ? ? ? return self.f.read(*args, **kwargs)
? ? def __del__(self):
? ? ? ? print(f"Del completed (var: {self.name})")
filename = "text.txt"
def different_name():
? ? textCont = "Hello World"
? ? print("Original content of the file")
? ? print(FileDebug(open(filename), "No name").read())
? ? textFile = FileDebug(open(filename, "w"), "textFile")
? ? textFile.write(textCont)
? ? print("New file content:")
? ? textFile_1 = FileDebug(open(filename), "textFile_1")
? ? print(textFile_1.read())
? ? textFile.close()
? ? textFile_1.close()
def same_name():
? ? textCont = "Hello World"
? ? print("Original content of the file")
? ? print(FileDebug(open(filename), "No name").read())
? ? textFile = FileDebug(open(filename, "w"), "textFile")
? ? textFile.write(textCont)
? ? print("New file content:")
? ? textFile = FileDebug(open(filename), "textFile")
? ? print(textFile.read())
? ? textFile.close()
different_name()
"""
Original content of the file
Del completed (var: No name)
New file content:
Closing file (var: textFile)
Closing file (var: textFile_1)
Del completed (var: textFile)
Del completed (var: textFile_1)
"""
#same_name()
"""
Original content of the file
Del completed (var: No name)
New file content:
Del completed (var: textFile) # the file is closed and the data is written
Hello World
Closing file (var: textFile)
Del completed (var: textFile)
"""

TA貢獻1831條經驗 獲得超4個贊
第二個案例中的問題得到了解決。
解決方案是在寫入之后但再次讀取之前關閉文件。
print(open(filename).read())
textFile = open(filename, "w")
textFile.write(textCont)
textFile.close() // close the file from write mode before reading it again
print("your file content:")
textFile_1 = open(filename)
print(textFile_1.read())
textFile_1.close()
添加回答
舉報