파일 압축을 풀려고하고 있는데 몇 가지 사항을 변경하고 다시 압축해야합니다. 감압은 잘 작동하는 것 같습니다. 압축하기위한 메소드가 필요합니다. 이전과 같은 방법으로 압축됩니다. python 및 zlib를 다시 압축하십시오.
Traceback (most recent call last):
File "C:\Users\LSDesktop\Desktop\bla - Copy.py", line 45, in <module>
data.append(zlib.decompressobj().decompress(b'x\x9c' + temp))
zlib.error: Error -3 while decompressing data: invalid stored block lengths
여기에 첫 번째 블록의 헤더를 포함하는 제 50 바이트 : 내 출력을 압축 할 때
import zlib
path = './input'
pathOut = './output'
def getInt(intArray):
summe = 0
for i in range(len(list(intArray))):
summe += intArray[i]*256**i
return(summe)
print(path)
inputfile = open(path, 'rb')
header = {}
header.update({"intro":inputfile.read(28)})
print("intro",(header["intro"]))
for key in ["header_size", "c_size", "header_v", "u_size", "blocks"]:
header.update({key:inputfile.read(4)})
print(key,getInt(header[key]))
inputfile.seek(getInt(header['header_size']))
blocks_count = getInt(header['blocks'])
data = []
for i in range(blocks_count):
block_header = {}
block_header.update({"c_size":inputfile.read(2)})
print("c_size",getInt(block_header["c_size"]))
block_header.update({"u_size":inputfile.read(2)})
print("u_size",getInt(block_header["u_size"]))
block_header.update({"checksum":inputfile.read(4)})
print("checksum",getInt(block_header["checksum"]))
temp = inputfile.read(getInt(block_header['c_size']))[2:-4]
data.append(zlib.decompressobj().decompress(b'x\x9c' + temp))
output = b''
inputfile.seek(0)
output = inputfile.read(getInt(header["header_size"]))
inputfile.close()
compressor = zlib.compressobj(1)
for block in data:
compressor.compress(block)
output += compressor.flush(zlib.Z_SYNC_FLUSH)
print("output length",len(output))
print("c_size",getInt(header["c_size"]))
outputFile = open(pathOut, 'wb')
outputFile.write(output)
outputFile.close()
는 말한다 :
여기 내 코드입니다. 사람은 (I 압축하기 전에 그들이 얼마나)해야한다 방법 : 나는 그것을 압축
b'B\x0c\x00 rWfyx\x01\xacY\tX\x14G\x16\xae\x9e)p\x00\r\x18\x15\xb9Lk\xc7\x03\xaf\x88\x1a\x8c\x0c\xa8\x084(\x82\x17\x87\x17\x88\xa3\x8c\x1c;r\x0b'
첫 번째 블록의 헤더를 포함하는 제 50 바이트 후 :
b'\xacY\tX\x14G\x16\xae\x9e)p\x00\r\x18\x15\xb9Lk\xc7\x03\xaf\x88\x1a\x8c\x0c\xa8\x084(\x82\x17\x87\x17\x88\xa3\x8c\x1c;r\x0b\x82&\nk4\x1c\x89fQ\x89'
이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –
아무 질문도 묻지 않았다는 사실을 제쳐두고 설정하면 답을 제공합니다. "Z_SYNC_FLUSH 대신 Z_FINISH를 시도해보십시오." 비평하거나 질문하기? –
글쎄, "Z_FINISH"로 "Z_SYNC_FLUSH"를 대체하면 "zlib.error : 데이터 압축 중 오류 -2 : 스트림 상태가 일관되지 않습니다."그리고 마지막 블록에 대해서만 수행하면 이전과 같은 오류가 발생합니다 . – user2640045