Существует две потенциальные причины, по которым вы видите это поведение.
Когда вы открываете файл для записи (с режимом открытия "w"
в Python), ОС удаляет оригинальный файл и создает совершенно новый.Таким образом, открывая файл для чтения сначала и , затем записи, исходный дескриптор чтения ссылается на файл, который больше не имеет имени (файл все еще существует, пока вы его не закроете).В этот момент вы читаете из файла, отличного от того, в который вы пишете.
После того, как вы измените порядок открытия, чтобы открыть для записи и , а затем , вы не будетеобязательно иметь возможность читать данные из файла до тех пор, пока вы его не очистите:
>>> writer.flush()
>>> reader.read()
'hello world\n'
При сбросе файла записываются все данные, которые могут быть в файловых буферах Python, в ОС, чтобы при чтении из файла издругой дескриптор, ОС вернет данные.Обратите внимание, что сам Python не знает, что эти два дескриптора ссылаются на один и тот же файл, но ОС знает.