Как перезаписать несколько байтов в середине файла с помощью Python? - PullRequest
17 голосов
/ 04 февраля 2009

Я хотел бы иметь возможность перезаписывать несколько байтов с заданным смещением в файле с помощью Python.

Мои попытки потерпели неудачу и привели к:

  • перезаписывает байты со смещением, а также обрезает файл сразу после (file mode = "w" или "w +")
  • добавление байтов в конец файла (режим файла = "a" или "a +")

Можно ли достичь этого с помощью Python переносимым способом?

Ответы [ 3 ]

33 голосов
/ 04 февраля 2009

Попробуйте это:

fh = open("filename.ext", "r+b")
fh.seek(offset)
fh.write(bytes)
fh.close()
5 голосов
/ 04 февраля 2009

Согласно этой странице Python вы можете ввести file.seek для поиска определенного смещения. Затем вы можете написать все, что вы хотите.

Чтобы избежать усечения файла, вы можете открыть его с помощью «+» и затем перейти к правому смещению.

0 голосов
/ 04 февраля 2009

Очень неэффективно, но я не знаю другого способа сейчас, чтобы не перезаписывал байтов в середине (как это делает Бен Бланкс):

a=file('/tmp/test123','r+')
s=a.read()
a.seek(0)
a.write(s[:3]+'xxx'+s[3:])
a.close()

напишет 'xxx' со смещением 3: 123456789 --> 123xxx456789

...