利用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模块,我们可以方便地进行文件和目录的压缩和解压缩操作,使得我们能够更好地处理和管理文件压缩和解压缩任务。
