python压缩与解压文件
在处理文件时,常常需要对文件进行压缩和解压缩操作,以便节省存储空间或便于传输。Python 提供了多个模块来处理不同格式的压缩文件,其中最常用的是
zipfile
和tarfile
模块。
1 使用 zipfile
模块
zipfile
模块用于处理 .zip
压缩文件。它可以创建、读取、写入和解压 .zip
文件。让我们从基本的 .zip
文件压缩和解压操作开始。
1.1 创建 .zip
文件
可以使用 zipfile.ZipFile()
方法来创建 .zip
文件,并向其中添加文件。
import zipfile
# 创建一个 zip 文件,并向其中添加文件
with zipfile.ZipFile('example.zip', 'w') as zipf:
zipf.write('file1.txt')
zipf.write('file2.txt')
print("压缩完成")
解释:
zipfile.ZipFile()
:创建一个新的 .zip
文件对象。'w'
模式:表示以写入模式打开 .zip
文件。write()
:将指定文件添加到 .zip
文件中。1.2 向现有 .zip
文件中追加文件
如果想向已经存在的 .zip
文件中添加文件,可以使用 'a'
模式(追加模式):
with zipfile.ZipFile('example.zip', 'a') as zipf:
zipf.write('file3.txt')
print("文件已追加到压缩包")
1.3 解压 .zip
文件
使用 extractall()
方法可以将 .zip
文件中的所有内容解压缩到指定目录。
# 解压文件到指定目录
with zipfile.ZipFile('example.zip', 'r') as zipf:
zipf.extractall('extracted_files')
print("文件已解压")
解释:
'r'
模式:表示以只读模式打开 .zip
文件。extractall()
:将 .zip
文件中的所有文件解压缩到指定目录。1.4 列出 .zip
文件中的文件
要查看 .zip
文件中包含的文件,可以使用 namelist()
方法。
# 列出 zip 文件中的所有文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
file_list = zipf.namelist()
print("压缩包中的文件:", file_list)
2 使用 tarfile
模块
tarfile
模块用于处理 .tar
、.tar.gz
等格式的压缩文件。它的使用方式与 zipfile
类似,支持创建、读取和解压缩 tar
文件。
2.1 创建 .tar
文件
要创建 .tar
文件,并向其中添加文件,可以使用 tarfile.open()
方法。
import tarfile
# 创建 tar 文件并添加文件
with tarfile.open('example.tar', 'w') as tarf:
tarf.add('file1.txt')
tarf.add('file2.txt')
print("tar 文件创建完成")
解释:
tarfile.open()
:用于创建或打开一个 tar
文件。'w'
模式:表示以写入模式创建 tar
文件。add()
:将文件添加到 tar
文件中。2.2 创建 .tar.gz
文件
如果想要创建一个 .tar.gz
文件,可以使用 'w:gz'
模式,这会对 .tar
文件进行 gzip 压缩。
# 创建 tar.gz 文件
with tarfile.open('example.tar.gz', 'w:gz') as tarf:
tarf.add('file1.txt')
tarf.add('file2.txt')
print("tar.gz 文件创建完成")
解释:
'w:gz'
模式:表示创建一个 .tar
文件并使用 gzip 压缩。2.3 解压 .tar
文件
与 .zip
文件类似,tarfile
模块也提供了解压文件的方法,可以使用 extractall()
来解压 .tar
文件。
# 解压 tar 文件
with tarfile.open('example.tar', 'r') as tarf:
tarf.extractall('extracted_tar_files')
print("tar 文件解压完成")
2.4 解压 .tar.gz
文件
解压 .tar.gz
文件与解压 .tar
文件类似,只需将打开模式设为 'r:gz'
。
# 解压 tar.gz 文件
with tarfile.open('example.tar.gz', 'r:gz') as tarf:
tarf.extractall('extracted_tar_gz_files')
print("tar.gz 文件解压完成")
2.5 列出 .tar
文件中的内容
使用 getnames()
方法可以列出 tar
文件中的所有文件。
# 列出 tar 文件中的文件
with tarfile.open('example.tar', 'r') as tarf:
file_list = tarf.getnames()
print("tar 文件中的文件:", file_list)
3 使用 shutil
模块进行高层次文件压缩
shutil
模块提供了 make_archive()
方法,能够快速创建 .zip
或 .tar
格式的压缩文件。它封装了底层的压缩逻辑,使用起来非常方便。
3.1 创建 .zip
压缩文件
import shutil
# 创建 zip 压缩文件
shutil.make_archive('archive', 'zip', 'folder_to_compress')
print("文件夹已压缩为 zip 文件")
3.2 创建 .tar.gz
压缩文件
# 创建 tar.gz 压缩文件
shutil.make_archive('archive', 'gztar', 'folder_to_compress')
print("文件夹已压缩为 tar.gz 文件")
4 选择合适的压缩格式
在选择压缩文件格式时,可以根据具体需求进行选择:
.zip
格式:广泛使用,特别适合需要在多平台间进行文件传输的场景。压缩速度较快,支持部分文件压缩,但压缩率相对较低。.tar.gz
格式:压缩率较高,适合大文件的压缩和传输,常用于 Unix/Linux 系统。压缩速度较慢,但能更有效地减少文件大小。5 实际应用场景
文件压缩与解压操作在数据备份、传输、存档等场景中非常常见。以下是一些常见的应用场景:
1 备份文件和目录
定期备份文件或目录是一项常见的自动化任务,尤其是对于重要数据,使用压缩可以节省存储空间。
import shutil
# 备份文件夹并压缩为 zip 文件
shutil.make_archive('backup', 'zip', 'data_folder')
print("数据已备份并压缩")
2 文件解压并自动处理
在某些场景中,自动化脚本会从网络上下载压缩包文件,解压后处理其中的数据。例如,处理定期更新的日志或报告文件。
import zipfile
# 解压 zip 文件并处理其中的文件
with zipfile.ZipFile('data.zip', 'r') as zipf:
zipf.extractall('extracted_data')
# 处理解压后的文件
for file in zipf.namelist():
print(f"处理文件: {file}")
# 在这里可以对文件进行进一步的操作,如分析数据
作者:昱晏