2013-05-02 2 views
0

파이썬에서 어떻게 이진 파일을 버퍼에로드 한 다음 개별 바이트를 문자열이 아닌 숫자로 읽는가? 같은 파일로파이썬 : 정수로 버퍼에 이진 파일을 읽습니다. 슬라이스

+0

나는 초기 질문이 전부는 아님을 안다. 그 명확하고 메신저 여전히 뭔가를 누락. 아래 예제와 같이 HennyH의 예와 같이 전체 파일을 인쇄하는 방법을 알고 있지만 바이트 5 만 인쇄하려면 어떻게해야합니까? 또는 663에서 765로 모든 바이트를 인쇄하고 싶습니까? – 16num

+1

업데이트 된 답변 @sixteenornumber를 참조하십시오. – HennyH

답변

3
with open('binary.txt',"rb",buffering=-1) as f: 
    for line in f: 
     for c in line: 
      print(c) 

:

"abcde" 

>>> 
97 
98 
99 
100 
101 

생산 옵션 버퍼링 인수는 여기에 설명되어 있습니다 :

버퍼링이 설정하는 데 사용되는 옵션 정수 버퍼링 정책. 버퍼 오버런 (바이너리 모드에서만 허용), 1에서 라인 버퍼링 선택 (텍스트 모드에서만 사용 가능) 및 고정 크기 청크 버퍼 크기를 나타내는 정수> 1 을 전달하려면 0을 전달합니다. 인수가 제공되지 않으면 기본 버퍼링 정책은 다음과 같이 작동합니다.

• 이진 파일은 고정 크기 청크로 버퍼링됩니다. 버퍼의 크기는 기본 장치의 "블록 크기"를 결정하고 DEFAULT_BUFFER_SIZE로 떨어지는 경험적 방법을 사용하여 선택됩니다. 많은 시스템에서 버퍼는 일반적으로 4096 또는 8192 바이트 길이입니다.

Python io.open

그리고 당신은 정말 치열하고 조작에 계획한다면, 당신은 당신의 코멘트에 대답하려면 bytearray

line = bytearray(line) 

으로 각 라인을 변환 할 수 있습니다이되는 문자를 필터링하는 방법을 보여줍니다 반복하다 :

with open('binary.txt',"rb",buffering=-1) as f: 
    for line in f: 
     for c in [b for b in line if b in range(663,765)]: #in a certain range 
      print(c) 
     for c in [b for b in line if b == 5]: #is a certain number 
      print(c) 
관련 문제