Почему file.write () добавляет дополнительную строку в конце? - PullRequest
0 голосов
/ 14 февраля 2020

Я обновлял текстовый файл с python (3.6), с открытым r +

with open(f+'.play', 'r+') as f2:
  play = f2.read()
  result = manipulate(play)
  print(result)
  f2.seek(0, 0)
  f2.write(result)

, делая это, я получаю неожиданную дополнительную конечную часть

</soap:Envelope>ap:Envelope>

из Конечно, дополнительная часть после первого закрытия>

Я исправил это, выполнив

with open(f+'.play', 'r+') as f2:
  play = f2.read()
  result = manipulate(play)
  print(result)
  f2.seek(0, 0)
  f2.truncate()
  f2.write(result)

, в этом случае запись работает, как я ожидаю.

Тем не менее, я не Понимаю, почему мне нужно усечь, не достаточно ли искать (0,0)? потому что, по моему мнению, seek (0) + write должен перезаписывать все содержимое надлежащим образом, какие знания мне здесь не хватает?

1 Ответ

1 голос
/ 14 февраля 2020

Если ваш старый контент имеет больший размер, чем тот, который вы пишете, дополнительная часть останется в файле. Когда вы вызываете seek(0, 0), вы go начинаете и начинаете писать оттуда побайтно, но старые данные не удаляются. Когда вы звоните truncate(), вы удаляете старые данные, чтобы они работали так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...