저는 현재 PPM 파일을 구문 분석하는 방법을 배우려고합니다. 나는 파이썬 인터프리터에서 다음을 수행했다.struct.unpack 및 struct.pack은 어떻게 작동합니까?
>>> x = open('file.ppm')
>>> x.readline()
'P6\n'
>>> x.readline()
'2 3\n'
>>> x.readline()
'255\n'
>>> x.readline()
'\n'
>>> x.readline()
'\x174R\x03\xd7\x1e\xb5e!-\xcd(D\\oL\x01'
나는 PPM 파일의 기본 구조를 알고있다. 그러나 나는 마지막 줄에 대해 가장 궁금하다. 픽셀의 색 정보가 포함 된 바이트 인코딩입니다. 이 파일은 위의 struct.pack('B',x)
를 사용하여
P6
2 3
255
10 23 52 82 3 215 30 181 101 33 45 205 40 68 92 111 76 1
로 다시 분석해야한다, 나는 정수 위의 바이트 인코딩으로 챙겨 것을 알 수있다. 그러나 struct.unpack
을 사용하여이 프로세스를 취소하는 방법을 잘 모르겠습니다. 가장 중요한 것은, 모두 같은 줄에 나타나기 때문에 각각의 바이트 인코딩을 잘랐는지 잘 모르겠다. 그리고 각각은 같은 길이 (?)로 보이지 않는다.
나는 또한 struct.pack('I','\x174R\x03\xd7\x1e\xb5e!-\xcd(D\\oL\x01')
을 수행하여 전체 줄을 꾸리려고했다. 바이트 인코딩을 정수로 직접 변환 할 수없는 이유를 모르겠습니다.
struct.pack(...)
을 사용하여 바이트 인코딩을 다시 정수로 구문 분석 할 수 있습니까? 또한, 그 값들이 패킹/언 패킹 될 때 어떤 일이 일어나고 있습니까?
문서의 형식 문자열 섹션을 읽는 것이 도움이 될 수 있습니다 : http://docs.python.org/2/library/struct.html#struct-format-strings – wolfrevo
텍스트 모드에서 파일을 열지 마십시오 '.readline()'을 사용하십시오. 바이너리 모드로 열려면 섹션을 읽는 대신'.read (number_of_bytes)'를 사용하십시오. 텍스트 모드에서 플랫폼 특정 라인 터미네이터는'\ n' 개행 문자로 변환되며 이는 일반적으로 바이너리 파일 읽기에서 원하는 것이 아닙니다. 마지막 하나의'.readline()'의'\ n'은 마지막'.readline()'으로 읽은 섹션의 일부입니다. –