f=open("text.txt","w")f.write("What is this?")在新終端中:x=open("text.txt","w")x.write("I am going to do the same.")x.close()然后我嘗試讀取并打印文件的內容:x=open("text.txt","r")print(x.read())What is this? do the same. #this is the output. I want to understand how this happened.
1 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
這里發生的事情是,在您的第一個會話中,在您完成f.write(...)
. (請注意,您還沒有關閉該文件。)在您的新終端中,您使用起始文件指針 0 寫入文件,然后輸出緩沖區被完全刷新到文件,因為您關閉了文件。
如果您在完成此操作后立即檢查輸出文件,那么您會發現內容只是I am going to do the same.
. 但是,一定是在您檢查文件時,您已經從第一個會話中清除了緩沖區的內容——這可能是因為您已經退出了 python 會話,或者因為您已經完成了顯式f.close()
或f.flush()
. 這將導致緩沖What is this?
被寫入文件。但是起始文件指針也是 0,因為第一個會話中的原始文件open
會將其定位在開頭(也會截斷任何現有內容)。所以它會覆蓋之前的部分I am going to do the same.
,導致觀察到的行為。
如果您有兩個進程都附加到同一個文件并且您希望確保避免寫入沖突,那么您需要執行以下操作:
a
或r+
模式打開文件當一個進程想要寫入時,它必須:
等待文件的獨占鎖
尋找文件的末尾
寫輸出
刷新輸出
釋放鎖
但是文件鎖定的細節超出了這個問題的范圍。
添加回答
舉報
0/150
提交
取消