Как перезаписать некоторые байты в середине файла с помощью Python?

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

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

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

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

Ответы

Ответ 1

Попробуйте следующее:

fh = open("filename.ext", "r+b")
fh.seek(offset)
fh.write(bytes)
fh.close()

Ответ 2

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

Чтобы избежать обрезки файла, вы можете открыть его с помощью "a +", а затем искать подходящее смещение.

Ответ 3

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

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

будет писать "xxx" со смещением 3: 123456789 --> 123xxx456789