2014-11-18 5 views
0

파이썬에 처음으로, 파일의 마지막 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)) 

정상적으로 실행되지만 내 2MB 파일은 모두 256 바이트로 잘립니다. 모두 0입니다.

+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). 나는 번역에서 어떤 것이 없어 졌다고 생각한다. –

관련 문제