概述
直接用网上的代码最常用的那段代码,但是有BUG,跑不起来,所以改写了一下,包括读写的次数控制,错误的捕获抛出,Python3可以直接跑.
详细代码
import os
import zlib
import math
BUFFER_SIZE = 1024
def compress(infile, dstfile):
filesize = os.path.getsize(infile)
read_times = math.ceil(filesize / BUFFER_SIZE) # 读取次数
zip = zlib.compressobj(level=9, wbits=15, memLevel=9)
try:
dstfile = open(dstfile, "wb")
with open(filename, "rb") as infile:
for i in range(read_times):
zip_buffer = zip.compress(infile.read(BUFFER_SIZE))
dstfile.write(zip_buffer)
dstfile.write(zip.flush())
except:
raise
finally:
dstfile.close()
return 1
def decompress(zipfile, dstfile):
filesize = os.path.getsize(zipfile)
read_times = math.ceil(filesize / BUFFER_SIZE)
dzip = zlib.decompressobj()
try:
dstfile = open(dstfile, "wb")
with open(zipname, "rb")as zipfile:
for i in range(read_times):
file_buffer = dzip.decompress(zipfile.read(BUFFER_SIZE))
dstfile.write(file_buffer)
except:
raise
finally:
dstfile.close()
return 1
if __name__ == '__main__':
filename = "demo.jpg"
zipname = "demo.gzip"
compress(filename, zipname)
d_zipname = "demo.gzip"
d_filename = "d_demo.jpg"
decompress(d_zipname, d_filename)
比较源文件和解压文件的一致性
def check_consistance(filename1, filename2):
file1_size = os.path.getsize(filename1)
with open(filename1, "rb") as file1:
buffer1 = file1.read(file1_size)
file2_size = os.path.getsize(filename2)
with open(filename2, "rb") as file2:
buffer2 = file2.read(file2_size)
if buffer1 == buffer2:
return True
else:
return False
print(check_consistance(filename,d_filename))
最后
以上就是机灵白羊为你收集整理的Python模块 zlib压缩和解压文件的简单例子/开箱即用的全部内容,希望文章能够帮你解决Python模块 zlib压缩和解压文件的简单例子/开箱即用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复