텍스트 요소 태그 세트 (각 십진 오프셋 값과 해당 바이너리 요소의 데이터 길이 포함)가 포함 된 xml 파일이 있고 끝에있는 모든 요소의 전체 바이너리 데이터. 예를 들면 다음과 같습니다.파이썬에서 텍스트 (오프셋 정보 포함) 및 바이너리 데이터 파일을 구문 분석
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<element>
<offset>0</offset>
<length>2961181</length>
<checksum>4238515972</checksum>
<format>gzip</format>
</element>
<element>
<offset>2961181</offset>
<length>5442</length>
<checksum>4238515972</checksum>
<format>bin</format>
</element>
</Package>
BINARY_DATA
오프셋은 10 진수이며 헤더 뒤의 첫 번째 바이트부터 계산됩니다. 어떻게 파이썬에서이 파일을 구문 분석하고 오프셋을 기반으로 해당 요소를 잡아서 압축을 풀고 (해당 형식이 gzip 인 경우) 압축하여 파일로 저장할 수 있습니까? OmnipotentEntity 및 Jakob_B의 응답에 따라 잘
가, 난 그냥이 첫번째 요소에 대해 작동하는지 확인하기 위해, 다음과 같은 간단한 스크립트를 만들어 : 그러나
import zlib
f = open("file.xml", "r")
text = f.read()
position = text.find("</Package>\n")
headerSize=position+ len("</Package>\n") + 1
offset=0
f.seek(headerSize + offset)
length = 2961181
bin_data = f.read(length)
zipped=1
if (zipped):
ungziped_str = zlib.decompressobj().decompress('x\x9c' + bin_data)
print(ungziped_str)
f.close()
, 나는 다음과 같은 오류가 발생했습니다 :
추적 (가장 최근 통화 마지막) : 파일 "file_parse.py"11 번 줄? ungziped_str = zlib.decompressobj() 압축 해제 ('X \ x9c'+ bin_data) zlib.error :. 유효하지 않은 블록 타입
문제가 무엇 : 오류 -3 압축을 푸는 동안? 입력 파일이 잘못되었거나 코드가 올바르지 않습니까?
테스트 XML (XML 다음에 BINARY_DATA가있는 테스트 XML)에서 실행하고 테스트를 위해 길이를 10으로 설정하면 "INARY_DATA"가 표시됩니다. 프로그래밍에 버그가 3 가지 밖에 없다는 것을 기억하십시오 : 예기치 않은 입력과 하나씩 오류가 있습니다. – Spacedman
감사합니다, Spacedman, off-by-one 오류, headerSize = position + len (" \ n")으로 변경되었지만 여전히 다른 오류가 발생했습니다 : ungziped_str = zlib.decompressobj(). decompress ('x \ x9c'+ bin_data) zlib.오류 : 압축을 푸는 동안 오류 -3 : 저장 블록 길이가 잘못되었습니다. – pepero
우리가 파일을 재생하지 않고 디버깅하기가 어려울 수 있습니다. 가급적 큰 toooooo하지 않는 것이 좋습니다. – Spacedman