2013-09-24 2 views
0

나는 이미 웹을 검색하여이를 일주일 동안 보냈습니다. 지금 당장 잃어 버렸어.특정 오프셋 후 설정된 양의 바이트 제거

저는 프로그래밍에 익숙하지 않고 현재 오프셋 값 다음에 설정된 양의 바이트를 제거하는 방법을 찾고 있습니다. 오프셋 이후의 모든 항목을 제거하는 것은 아닙니다.

filep = open('filepath', 'r+') 
filep.seek(offset in dec) 
#command to delete a set amount of bytes from here 
filep.save() 
filep.close() 

내가이 작품을 만들기에 대해 어떻게 갈 수있는이

은 지금은 단지 있나요?

답변

0

수 없습니다. 파일을 다시 작성해야합니다.

  • 당신은 끝까지 모든 방법을 덮어 잘라야 당신은 당신이하려는 말 그래서

에서 변경

  • 을 자신의 길이를 변경하지 않습니다 중 하나를 경우에만 파일을 변이 수 . 필자는 파일을 덮어 쓰는 것을 권장합니다. 특히 새 파일을 작성한 다음 원자 적으로 이동하는 경우에 특히 좋습니다.

  • 2

    Veedrac이 이미 지적했듯이 가장 쉬운 방법은 수정 된 내용으로 새 파일을 만드는 것입니다. 원본 파일이 더 이상 필요없는 경우 나중에 새 파일 move을 입력 할 수 있습니다.

    다음 코드는 새 파일을 만드는 데 도움이됩니다.

    OFFSET = 3 
    ENDOFFSET = 4 
    
    with open('file.txt', 'rb') as inputfile, open('out.txt', 'wb') as outfile: 
        outfile.write(inputfile.read(OFFSET - 1)) 
        inputfile.seek(ENDOFFSET) 
        outfile.write(inputfile.read()) 
    

    with-statement은 파일 처리시 편리합니다.

    +0

    나는 당신이 정확하게 찾고 있다고 확신하지 않습니다. 'inputfile.seek (bytes_to_skip, whence = io.SEEK_CUR)'(그리고 yes,'whence')와 같지 않아야합니까? – Veedrac

    +0

    빠른 답장을 보내 주셔서 감사합니다! 나는 그런 것을 발견하지 못했다. 그래서 나는 처음부터 원하는 오프셋을 잘라야하고, 끝에서부터 나가기를 원하는 바이트의 마지막 오프셋까지 양쪽 모두를 잘라내야합니다. truncate 함수로 whence를 사용할 수 있습니까? – Aesreal

    +0

    코드가 완벽하게 작동합니다! 고맙습니다.하지만 평판이 부족하기 때문에 +를 줄 수는 없습니다 .. – Aesreal

    0

    다음은 파일 내부에서 바이트를 삭제하는 또 다른 방법입니다.

    def zapper(filepath, offset, length): 
        with open(filepath, 'rb+') as filep: 
         filep.seek(offset + length) 
         data = filep.read() 
         filep.seek(offset) 
         filep.write(data) 
         filep.truncate() 
    
    관련 문제