zipfile是Python的一个内置模块,它提供了用于读取和写入ZIP格式归档文件的接口。ZIP文件是一种常见的归档文件格式,可以将多个文件和目录压缩为一个单独的文件。方便我们对zip格式的文件读取、写入。
ZipFile类:表示一个ZIP文件对象,可以用来读取或写入ZIP文件。可以通过实例化ZipFile对象来打开一个ZIP文件,然后使用其中的方法来操作文件和目录。
import zipfile
file = zipfile.ZipFile('chat-gpt-website-master.zip', mode='r', compression=zipfile.ZIP_STORED)
第一个参数是要读取或者写入的zip文件名
mode表示要模式,r表示读取,w表示写入,a表示追加,默认为读取模式。
compression表示压缩模式
压缩模式 | 含义 |
---|---|
ZIP_STORED | 不压缩,默认值 |
ZIP_DEFLATED | 常用的 ZIP 压缩 |
ZIP_BZIP2 BZIP2 | 压缩 |
ZIP_LZMA LZMA | 压缩 |
ZipFile.read()方法:读取ZIP文件中的文件内容。pwd可以指定解压密码密码。
ZipFile.close()方法:关闭ZIP文件对象,释放资源。
import zipfile
file = zipfile.ZipFile('chat-gpt-website-master.zip', mode='r', compression=zipfile.ZIP_STORED)
print(file.read('chat-gpt-website-master/requirements.txt'))
file.close()
zipfile.is_zipfile(filename) 判断是否为zip文件,如果是返回True,不是返回False
import zipfile
file = zipfile.is_zipfile('chat-gpt-website-master.zip')
print(file)
ZipInfo类:表示ZIP文件中的一个文件或目录的信息,包括名称、大小、压缩方法等。可以通过ZipFile对象的getinfo()方法来获取ZipInfo对象。
import zipfile
file = zipfile.ZipFile('chat-gpt-website-master.zip', mode='r', compression=zipfile.ZIP_STORED)
for i in file.namelist():
print(file.getinfo(i)) # 传入文件名
infolist() 返回一个包含ZIP文件内所有成员信息的ZipInfo对象
import zipfile
file = zipfile.ZipFile('chat-gpt-website-master.zip', mode='r', compression=zipfile.ZIP_STORED)
print(file.infolist())
namelist () 返回按名称排序的文件列表
import zipfile
file = zipfile.ZipFile('chat-gpt-website-master.zip', mode='r', compression=zipfile.ZIP_STORED)
print(file.namelist())
方法 | 含义 |
---|---|
extract() | 解压指定的文件 |
extractall() | 解压所有文件 |
extract()方法实例
import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zip_file:
# 解压指定文件到指定目录
zip_file.extract('file.txt', 'output_directory')
extractall()方法实例
import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zip_file:
# 解压所有文件到指定目录
zip_file.extractall('output_directory')
创建zip文件并解压和读取
import zipfile
# 创建压缩文件并写入文件
for i in range(1, 5):
file = zipfile.ZipFile(f'{i}.zip', mode='w', compression=zipfile.ZIP_DEFLATED)
file.write('test.txt')
file.close()
# 读取文件内容
for i in range(1, 5):
read_file = zipfile.ZipFile(f'{i}.zip')
print(read_file.read('test.txt'))
# 解压文件指定文件
file = zipfile.ZipFile('1.zip')
# 第一个参数有是要解压的文件 第二个参数是指定解压文件存放的目录 如果没有该目录会自动创建
file.extract('test.txt', 'yass')
# 解压所有文件
file = zipfile.ZipFile('1.zip')
file.extractall('yass')
解压zip,写入新文件重写压缩
import zipfile
import os
# 读取文件
file = zipfile.ZipFile('chat-gpt-website-master.zip')
file.extractall('yyds')
file.close()
def zip_directory(root_dir, zip_file):
for root, dirs, files in os.walk(root_dir):
# root 表示当前正在访问的文件夹路径
# dirs 表示该文件夹下的子目录名list
# files 表示该文件夹下的文件list
for file in files:
file_path = os.path.join(root, file)
print(file_path)
# arcname将文件写入指定目录 目录+文件名
zip_file.write(file_path, arcname='chat-gpt-website-master/'+os.path.relpath(file_path, root_dir))
zip_file.write('test.md', arcname='chat-gpt-website-master/test.md')
with zipfile.ZipFile('file.zip', 'w') as zip_file:
# 压缩指定目录及其嵌套文件
zip_directory('yyds/chat-gpt-website-master', zip_file)