""" 字符串、文件的压缩和解压 - zlib 入门。 模块:python3 zlibModule 字符串、文件的压缩和解压.py 参考:https://blog.csdn.net/heyshheyou/article/details/79894002 知识点: 1.参考《zlib 知识点.txt》 """ import zlib def zlib_str(): """ 字符串的压缩与解压。 :return: """ message = 'hello world!' bytes_message = message.encode() compressed = zlib.compress(bytes_message, zlib.Z_BEST_COMPRESSION) decompressed = zlib.decompress(compressed) print("message:", message) print("len(message):", len(message)) print("bytes_message:", bytes_message) print("len(bytes_message):", len(bytes_message)) print("compressed:", compressed) print("len(compressed):", len(compressed)) print("decompressed:", decompressed) print("len(decompressed):", len(decompressed)) # zlib.compressobj 用来压缩数据流,用于文件传输 def file_compress(beginFile, zlibFile, level): """ 文件压缩。 :param beginFile: 待压缩的文件。 :param zlibFile: 压缩后的文件。 :param level: 压缩水平(级别)。 :return: """ infile = open(beginFile, "rb") zfile = open(zlibFile, "wb") compressobj = zlib.compressobj(level) # 压缩对象 data = infile.read(1024) # 1024为读取的size参数 while data: zfile.write(compressobj.compress(data)) # 写入压缩数据 data = infile.read(1024) # 继续读取文件中的下一个size的内容 zfile.write(compressobj.flush()) # compressobj.flush()包含剩余压缩输出的字节对象,将剩余的字节内容写入到目标文件中 infile.close() zfile.close() def file_decompress(zlibFile, endFile): """ 文件解压缩。 :param zlibFile: 待解压的文件。 :param endFile: 解压后的文件。 :return: """ zlibFile = open(zlibFile, "rb") endFile = open(endFile, "wb") decompressobj = zlib.decompressobj() data = zlibFile.read(1024) while data: endFile.write(decompressobj.decompress(data)) data = zlibFile.read(1024) endFile.write(decompressobj.flush()) zlibFile.close() endFile.close() def main(): # zlib_str() # # 2.数据流(文件)压缩 # beginFile = "./zlib 知识点.txt" # zlibFile = "./zlibFile.txt" # level = 9 # file_compress(beginFile, zlibFile, level) # 3.数据流(文件)解压 zlibFile = "./zlibFile.txt" endFile = "./endFile.txt" file_decompress(zlibFile, endFile) if __name__ == "__main__": main()