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

如何在Python中使用bz2模块对目录进行压缩和解压缩

发布时间:2024-01-14 05:07:46

在Python中,可以使用bz2模块对目录进行压缩和解压缩。bz2模块提供了一种使用bzip2算法进行数据压缩和解压缩的功能。

下面是一个使用bz2模块对目录进行压缩的例子:

import os
import bz2

def compress_directory(input_dir, output_file):
    # 遍历目录中的所有文件
    files = [os.path.join(input_dir, file) for file in os.listdir(input_dir)]
    
    with bz2.BZ2File(output_file, 'wb') as f_out:
        for file in files:
            if os.path.isfile(file):
                # 读取文件内容
                with open(file, 'rb') as f_in:
                    data = f_in.read()
                # 将文件内容写入压缩文件
                f_out.write(data)
                print(f"Compressed file: {file}")
    
    print("Compression complete.")

# 示例调用
compress_directory('path/to/input/directory', 'path/to/compressed_file.bz2')

上述代码中,compress_directory是一个函数,用于将指定目录(input_dir)中的所有文件压缩到一个压缩文件(output_file)中。首先,使用os.listdir()函数获取目录中的所有文件,并使用os.path.join()函数将文件路径与目录路径拼接。然后,使用bz2.BZ2File(output_file, 'wb')创建一个BZ2File对象,用于写入压缩文件。接下来,循环遍历文件列表,如果是文件,则打开文件并使用open(file, 'rb')读取文件内容。最后,使用f_out.write(data)将文件内容写入压缩文件中。

对于解压缩,可以使用bz2模块中的BZ2File对象的read()方法来读取压缩文件中的数据,并使用open(file, 'wb')将数据写入文件中。下面是一个解压缩的示例:

import bz2

def decompress_file(input_file, output_dir):
    with bz2.BZ2File(input_file, 'rb') as f_in:
        # 读取压缩文件中的数据
        data = f_in.read()
    # 拼接输出文件路径
    output_file = os.path.join(output_dir, os.path.basename(input_file)[:-4])
    # 将数据写入输出文件
    with open(output_file, 'wb') as f_out:
        f_out.write(data)
    print(f"Decompressed file: {input_file}")
    
    print("Decompression complete.")

# 示例调用
decompress_file('path/to/compressed_file.bz2', 'path/to/output/directory')

上述代码中,decompress_file是一个函数,用于将指定的压缩文件(input_file)解压缩到指定的目录(output_dir)。首先,使用bz2.BZ2File(input_file, 'rb')创建一个BZ2File对象,用于读取压缩文件。然后,使用f_in.read()读取压缩文件中的数据。接下来,使用os.path.basename(input_file)[:-4]获取输出文件的文件名(去除压缩文件后缀)。最后,使用open(output_file, 'wb')创建一个文件对象,并使用f_out.write(data)将数据写入输出文件中。

以上就是在Python中使用bz2模块对目录进行压缩和解压缩的例子。需要注意的是,在实际使用中,可以根据需求对上述代码进行适当的修改和优化。