Python 进阶学习笔记之十二:数据压缩与归档

这篇进阶学习笔记详细介绍了Python中的数据压缩模块gzip、bz2、lzma以及文件归档模块zipfile和tarfile。通过实例展示了如何使用这些模块进行数据压缩、解压缩以及创建和读取归档文件。同时,文中提到了不同模块的特点和适用场景,如gzip和bz2适合大文本块的压缩,lzma则适合嵌入式系统,zipfile和tarfile用于文件级别的压缩和解压缩操作。
摘要由CSDN通过智能技术生成

Python 进阶系列笔记前置文章链接:
Python 进阶学习笔记之一:内置常用类型及方法
Python 进阶学习笔记之二:常用数据类型(上)
Python 进阶学习笔记之三:常用数据类型(下)
Python 进阶学习笔记之四:高效迭代器工具
Python 进阶学习笔记之五:异步 IO
Python 进阶学习笔记之六:多线程编程
Python 进阶学习笔记之七:互联网支持
Python 进阶学习笔记之八:面向对象高级编程
Python 进阶学习笔记之九:IO 编程
Python 进阶学习笔记之十:一般加密支持
Python 进阶学习笔记之十一:日志支持

——————
Python 为常见的数据压缩和文档压缩提供了独立的模块支持,这些模块包括gziplzmazipfiletarfile

1 gzip 模块

此模块提供的简单接口帮助用户压缩和解压缩数据以及文件内容,功能类似于 UNIX 操作系统中的 gzip 和 gunzip 命令来处理单个文件。
gzip 模块提供 GzipFile 类和 open()compress()decompress() 几个便利的函数。GzipFile 类可以读写 gzip 格式的文件,还能自动压缩和解压缩数据,这让操作压缩文件如同操作普通的 file object 一样方便。

# 读取 gz 压缩文件
import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
    file_content = f.read()

写入数据压缩文件

import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
    f.write(content)
    f.write(content)   # 数据比较大时,可以分次写入

由一个文件创建压缩文件

import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
    with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

只压缩和解压缩数据

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)
content = gzip.decompress(s_out)
print(s_in == content)  # True

2 bz2 模块

此模块提供了使用 bzip2 压缩算法压缩和解压数据的一套完整的接口,使用方式也很简单。bz2 模块中主要使用一下功能:

  • 用于读写压缩文件的 open() 函数和 BZ2File 类。
  • 用于增量压缩和解压的 BZ2Compressor 和 BZ2Decompressor 类。
  • 用于一次性压缩和解压的 compress() 和 decompress() 函数。

此模块中的所有类都能安全地从多个线程访问。

上面提及的 open() 函数和 BZ2File 类都可以用于读写压缩文件,区别是 open() 可以使用文本模式或二进制模式打开压缩文件,而 BZ2File 类只能以二进制模式打开。
实用比较简单,直接贴代码吧:

# 直接使用 open 函数读写 bz2 文件
import bz2
content = """
        hello world
        hello world
    """
# 新建一个 bz2 压缩文件并写入内容,压缩级别为6 (压缩级别取值范围 1-9,默认9)
with bz2.open("/home/file.bz2", 'wb', compresslevel=6) as ff:
    ff.write(content.encode("utf-8"))

# 打开一个 bz2 压缩文件并读取内容
with bz2.open("/home/file.bz2", 'r') as ff:
    ct = ff.read()
    print(ct)
# 使用 BZ2File 类读写 bz2 文件
import bz2
content = """
            Donec rhoncus quis sapien sit amet molestie. Fusce scelerisque vel augue
            nec ullamcorper. Nam rutrum pretium placerat. Aliquam vel tristique lorem,
            sit amet cursus ante. In interdum laoreet mi, sit amet ultrices puru
            pulvinar a. Nam gravida euismod magna, non varius justo tincidunt feugiat.
            Aliquam pharetra lacus non risus vehicula rutrum. Maecenas aliquam leo
            felis. Pellentesque semper nunc sit amet nibh ullamcorper, ac elementum
            dolor luctus. Curabitur lacinia mi ornare consectetur vestibulum.
        """
with open("/home/file2.bz2", 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值