2014-11-18 2 views
0

Я новичок в Python, пытаясь перезаписать последние 128 байт файла с помощью zer0s. Что я делаю не так?Запись в конец двоичного файла

try: 
     f = open(outputFile, "wb") 
     f.seek(128, 2) # seek relative to end of file 
     f.write(b'\0'*128) 
     f.close() 

    except Exception as e: 
     sys.exit('Error writing output file ' + str(e)) 

Он работает нормально, но мой файл размером 2 мБ обрезается до 256 байтов, все zer0.

+3

Кажется, что вы ищете 128 байт * мимо * конца файла. 'help (file.seek)' говорит, что поиск по отношению к концу файла должен быть отрицательным числом. Однако я не знаю, почему это приводит к усеченному файлу. – TessellatingHeckler

ответ

3

Как documented, открытие в 'w' режима обрезает файл (т. Е. Удаляет его существующее содержимое). Попробуйте открыть его в режиме 'r+b'.

Также, как описано here (хотя, по общему признанию, не с полной ясностью), поиск по отношению к концу файла по-прежнему использует положительные числа, что означает «вперед» и отрицательное значение «назад» (то есть к началу файла) , Вы ищете информацию о конце файла. Используйте seek(-128, 2).

+0

, что мы делали в его [другом вопросе] (http://stackoverflow.com/questions/26986918/error-writing-output-file-int-does-not-support-the-buffer-interface/26986961# 26986961). Я думаю, что что-то заблудилось в переводе –

Смежные вопросы