在日常工作中,我们经常需要处理压缩文件,无论是打包文件还是解压文件。Python标准库中的zipfile和tarfile模块提供了强大的工具来帮助我们处理ZIP和TAR文件。下面我们将详细介绍这两个模块的功能,并通过具体的示例来演示如何使用它们。
zipfile模块
zipfile模块提供了创建、读取、写入、添加和提取ZIP文件的功能。它支持ZIP文件的加密和解密。
创建一个新的ZIP文件
import zipfile
# 创建一个ZIP文件
with zipfile.ZipFile('example.zip', 'w') as zipf:
zipf.write('example.txt', compress_type=zipfile.ZIP_DEFLATED)
print("ZIP file created successfully.")
读取ZIP文件的内容
import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
# 打印ZIP文件中的文件列表
print(zipf.namelist())
解压ZIP文件
import zipfile
# 解压ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
zipf.extractall('output')
print("Files extracted to 'output' directory.")
添加文件到现有的ZIP文件
import zipfile
# 添加文件到ZIP文件
with zipfile.ZipFile('example.zip', 'a') as zipf:
zipf.write('another_example.txt', compress_type=zipfile.ZIP_DEFLATED)
print("Another file added to ZIP.")
删除ZIP文件中的文件
import zipfile
import os
# 创建一个临时ZIP文件
with zipfile.ZipFile('temp.zip', 'w') as zipf:
zipf.write('example.txt')
# 打开ZIP文件并删除文件
with zipfile.ZipFile('temp.zip', 'a') as zipf:
# 获取ZIP文件中的文件列表
files_in_zip = zipf.namelist()
# 删除指定的文件
for filename in files_in_zip:
if filename == 'example.txt':
# 从ZIP文件中删除文件
# 注意:Python标准库不直接支持从ZIP文件中删除文件,这里只是一个示例
# 实际操作需要先解压文件,然后重新打包
zipf.extract(filename)
os.remove(filename)
new_zip = zipfile.ZipFile('new_temp.zip', 'w')
for f in zipf.namelist():
if f != filename:
zipf.extract(f)
new_zip.write(f)
os.remove(f)
new_zip.close()
os.rename('new_temp.zip', 'temp.zip')
print("File removed from ZIP.")
列出ZIP文件中的文件信息
import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
# 获取ZIP文件中的文件列表
for info in zipf.infolist():
print(info.filename, info.date_time, info.file_size)
读取ZIP文件中的文件内容
import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
# 读取文件内容
with zipf.open('example.txt') as file:
print(file.read().decode())
创建带密码保护的ZIP文件
import zipfile
# 创建带密码保护的ZIP文件
with zipfile.ZipFile('example_protected.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
zipf.setpassword(b'secret')
zipf.write('example.txt')
print("Protected ZIP file created.")
读取带密码保护的ZIP文件
import zipfile
# 读取带密码保护的ZIP文件
with zipfile.ZipFile('example_protected.zip', 'r') as zipf:
try:
zipf.extractall(pwd=b'secret')
print("Protected ZIP file read successfully.")
except RuntimeError as e:
print(e)
tarfile模块
tarfile模块提供了创建、读取、写入和提取TAR文件的功能。它还支持GZIP和BZIP2压缩。
创建一个新的TAR文件
import tarfile
# 创建一个TAR文件
with tarfile.open('example.tar', 'w') as tarf:
tarf.add('example.txt')
print("TAR file created successfully.")
创建一个带GZIP压缩的TAR文件
import tarfile
# 创建一个带GZIP压缩的TAR文件
with tarfile.open('example.tar.gz', 'w:gz') as tarf:
tarf.add('example.txt')
print("GZIP-compressed TAR file created.")
创建一个带BZIP2压缩的TAR文件
import tarfile
# 创建一个带BZIP2压缩的TAR文件
with tarfile.open('example.tar.bz2', 'w:bz2') as tarf:
tarf.add('example.txt')
print("BZIP2-compressed TAR file created.")
读取TAR文件的内容
import tarfile
# 打开TAR文件
with tarfile.open('example.tar', 'r') as tarf:
# 打印TAR文件中的文件列表
print(tarf.getnames())
解压TAR文件
import tarfile
# 解压TAR文件
with tarfile.open('example.tar', 'r') as tarf:
tarf.extractall('output')
print("Files extracted to 'output' directory.")
添加文件到现有的TAR文件
import tarfile
# 添加文件到TAR文件
with tarfile.open('example.tar', 'a') as tarf:
tarf.add('another_example.txt')
print("Another file added to TAR.")
列出TAR文件中的文件信息
import tarfile
# 打开TAR文件
with tarfile.open('example.tar', 'r') as tarf:
# 获取TAR文件中的文件列表
for member in tarf.getmembers():
print(member.name, member.size, member.mtime)
读取TAR文件中的文件内容
import tarfile
# 打开TAR文件
with tarfile.open('example.tar', 'r') as tarf:
# 读取文件内容
with tarf.extractfile('example.txt') as file:
print(file.read().decode())
本文暂时没有评论,来添加一个吧(●'◡'●)