欢迎访问宙启技术站
智能推送

利用Python的gzip模块实现目录的压缩和解压缩

发布时间:2023-12-16 18:36:21

gzip模块是Python内置的用于对文件和数据流进行gzip压缩和解压缩的模块。它提供了一些函数来方便地进行文件的压缩和解压缩操作。

1.压缩单个文件:

我们可以使用gzip模块中的GzipFile类来创建一个gzip文件对象,并利用该对象将一个文件压缩成gzip格式。下面是一个将文件mydata.txt压缩为mydata.txt.gz的例子:

import gzip

def compress_file(file_path):
    # 打开需要压缩的文件
    with open(file_path, 'rb') as file:
        # 创建gzip文件对象
        with gzip.open(file_path + '.gz', 'wb') as gzip_file:
            # 将文件内容压缩到gzip文件中
            gzip_file.writelines(file)

compress_file('mydata.txt')

2.解压缩单个文件:

我们可以使用gzip模块中的GzipFile类来创建一个gzip文件对象,并利用该对象将一个gzip文件解压缩为原始文件。下面是一个将文件mydata.txt.gz解压缩为mydata.txt的例子:

import gzip

def decompress_file(gzip_file_path):
    # 创建gzip文件对象
    with gzip.open(gzip_file_path, 'rb') as gzip_file:
        # 读取gzip文件内容
        content = gzip_file.read()
        # 解压缩内容并写入原始文件
        with open(gzip_file_path[:-3], 'wb') as file:
            file.write(content)

decompress_file('mydata.txt.gz')

3.压缩目录:

如果我们希望压缩一个目录及其子目录下的所有文件,可以使用os模块来遍历目录并逐个压缩文件。下面是一个将目录myfolder压缩为myfolder.zip的例子:

import gzip
import os

def compress_directory(directory_path):
    # 获取目录中所有文件及子目录
    file_list = []
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            file_path = os.path.join(root, file)
            file_list.append(file_path)

    # 逐个压缩文件
    with gzip.open(directory_path + '.zip', 'wb') as gzip_file:
        for file_path in file_list:
            with open(file_path, 'rb') as file:
                gzip_file.write(file.read())

compress_directory('myfolder')

4.解压缩目录:

如果我们希望解压缩一个目录及其子目录下的所有文件,可以使用gzip模块的GzipFile类结合os模块来遍历目录并逐个解压缩文件。下面是一个将目录myfolder.zip解压缩为myfolder的例子:

import gzip
import os

def decompress_directory(gzip_file_path):
    # 创建gzip文件对象
    with gzip.open(gzip_file_path, 'rb') as gzip_file:
        # 读取gzip文件内容
        content = gzip_file.read()

        # 获取压缩包中的文件路径列表
        file_list = []
        for root, dirs, files in os.walk(gzip_file_path[:-4]):
            for file in files:
                file_path = os.path.join(root, file)
                file_list.append(file_path)

        # 解压缩内容并写入原始文件
        for file_path in file_list:
            with open(file_path, 'wb') as file:
                file.write(content)

decompress_directory('myfolder.zip')

通过利用gzip模块,我们可以方便地进行文件和目录的压缩和解压缩操作,使得我们能够更好地处理和管理文件压缩和解压缩任务。