Python: file.write () не пишет в текущей позиции file.tell () - PullRequest
0 голосов
/ 06 января 2020

Я читаю строку из текстового файла и сразу после этого пишу строку в том же файле. Однако строка записывается в конце файла, а не в текущей позиции файла. В чем причина write написания в ложной позиции? Как я могу заставить write писать в нужной позиции файла?

Вот код:

Сначала я создаю файл с двумя строками текста:

>>> file_test_01 = open('test_01.txt', 'w')
>>> 
>>> file_test_01.write('Firstword\n')
10
>>> file_test_01.write('Secondword\n')
11
>>> file_test_01.close()

Теперь файл test_01.txt имеет следующее содержимое:

Firstword
Secondword

Затем я читаю одну строку из файла и что-то пишу потом. Хотя tell показывает позицию 10 в файле, текст "New" записывается в конце файла. В чем ошибка?

>>> file_test_02 = open('test_01.txt', 'r+')
>>> read_text = file_test_02.readline()
>>> read_text
'Firstword\n'
>>> print('Position: ', file_test_02.tell())
Position:  10
>>> file_test_02.write('New\n')
4
>>> file_test_02.close()

Текстовый файл выглядит так

Firstword
Secondword
New

Согласно моему пониманию операций с файлами, он должен выглядеть следующим образом:

Firstword
New
ndword

Тем не менее, если я добавлю команду file_test_02.seek(file_test_02.tell()), содержимое файла будет соответствовать ожидаемому. Но это не имеет смысла для меня, потому что эта команда говорит: «go на место, где вы на самом деле», т. Е. Полностью избыточный.

Полный работающий код:

>>> file_test_02 = open('test_01.txt', 'r+')
>>> read_text = file_test_02.readline()
>>> read_text
'Firstword\n'
>>> print('Position: ', file_test_02.tell())
Position:  10
>>> file_test_02.seek(file_test_02.tell())
10
>>> file_test_02.write('New\n')
4
>>> file_test_02.close()

Примечание: То же самое происходит в Python 3.5.2 (по умолчанию, 8 октября 2019, 13:06:37) [G CC 5.4.0 20160609] на linux и в Python 3.7.6 (по умолчанию, De c 19 2019, 23:49:42) [G CC 5.4.0 20160609] в linux

...