2012-08-14 4 views
1

bitarray 0.8.0을 사용하여 비트를 이진 파일에 쓰는 프로그램을 작성했습니다. 이 이진 파일에 헤더를 추가하여 파일 내부 내용을 설명하고 싶습니다.파이썬에서 파일의 bitarray 's 파일을 사용하여 헤더가있는 이진 파일 읽기

제 문제는 비트 배열의 "fromfile"메소드가 반드시 처음부터 파일 읽기를 시작한다고 생각합니다. 나는 독서 프로그램이 헤더를 얻은 다음 이진 부분 (bitarray tofile) 만 들어있는 임시 파일을 다시 쓰도록 임시 해결책을 만들 수있다.하지만 아이디어가 너무 효율적이지는 않다.

올바르게 수행 할 수있는 방법이 있습니까?

같은 것을 볼 수 있었다 내 파일 일반 텍스트 헤더이며, 바이너리 데이터가 bitarray 정보입니다 다음

... {(0, 0) : '0'} {(0, 0) : '0'} {(0, 0) : '0'} ...

편집 :

bits = "" 
b = bitarray() 
with open(Filename, 'rb') as file: 
    #Get header 
    byte = file.read(1) 
    while byte != "": 
     # read header 
     byte = file.read(1) 
    b.fromfile(file) 
    print b.to01() 
    print "len(b.to01())", len(b.to01()) 
:

나는 응답을 읽은 후 다음을 시도

길이가 0이고 "to01()"의 인쇄가 비어 있습니다. 그러나 헤더의 인쇄가 잘됩니다.

답변

2

내 문제는 필자가 bitarray의 "fromfile"메소드가 반드시 처음부터 파일 읽기를 시작한다고 생각하는 것입니다.

이것은 잘못된 것 같습니다. 대부분의 다른 파일 읽기 루틴과 마찬가지로 파일 내의 현재 위치에서 시작하여 EOF에서 멈 춥니 다.

EDIT :

문서에서

:

FROMFILE (F [N]) 파일 오브젝트 F로부터

읽기 N 바이트와 bitarray로 추가 기계 값으로 해석됩니다. n을 생략하면 EOF에 도달 할 때까지 읽은 바이트 수만큼 읽습니다.

+0

> FROMFILE (F [N]) 읽기 N 파일 오브젝트 F 바이트 기계 값으로 해석 bitarray로 추가. n을 생략하면 EOF에 도달 할 때까지 읽은 바이트 수만큼 읽습니다. – mgilson

+0

나는 당신에 동의합니다. 나는 문서의 인용문이 당신의 주장을 고쳐 줄 것이라고 생각했습니다. – mgilson

+0

@mgilson : 충분합니다. 나는 적절한 발췌 부분을 포함하도록 편집 할 것이다. –