有时候我们经常用到.zip压缩包文件,而Python内置了zipfile模块可以处理zip压缩文件。
读取压缩包内的文件名称
zipfile.ZipFile() / .namelist() 注意大小写问题
# 引入zipfile模块 import zipfile with zipfile.ZipFile('demo.zip','r') as zzz: print(zzz.namelist()) # 运行结果:['file1.txt', 'file2.txt', 'temp_file.png']
如果压缩包里的文件名有中文,则容易出现乱码,所以这时候,需要对中文文件名进行转码:
with zipfile.ZipFile('demo.zip','r') as zzz: for f_name in zzz.namelist(): print(f_name.encode('cp437').decode('gbk')) ''' 运行结果: file1.txt file2.txt temp_file.png 数据分析.PNG'''
读取压缩包内文件信息
.getinfo() 读取文件信息
with zipfile.ZipFile('demo.zip','r') as zzz: for f_name in zzz.namelist(): f_info = zzz.getinfo(f_name) f_name = f_name.encode('cp437').decode('gbk') # 输出该文件的文件大小.file_size和压缩之后的大小compress_size print(f_name,f_info.file_size,f_info.compress_size) ''' 运行结果: file1.txt 98 47 file2.txt 98 47 temp_file.png 22061 18211 数据分析.PNG 178210 177931''' # 除了大小之外.getinfo()还可以读取出filename、compress_type、external_attr属性。
从压缩包里解压文件
.extract() 可以把某个文件从.zip压缩包里解压出来
格式:.extract('要解压的zip文件名','解压到的位置') 如果不填写解压的位置,则默认解压到当前目录
with zipfile.ZipFile('demo.zip','r') as zzz: zzz.extract('file1.txt') # 把压缩包里的file1.txt解压到当前目录 # 如果压缩包里出现中文,则需要进行转码(所以在用Python压缩文件和解压的时候最好不要出现中文路径和文件名)
如果被解压的文件名里有中文,则可以先解压,然后再重命名。
import zipfile,os # 需要用到os模块 with zipfile.ZipFile('demo.zip', 'r') as z: f_name = '添加数据.png' # 把压缩包里的 添加数据.png 文件解压出来 f_temp = f_name.encode('gbk').decode('cp437') z.extract(f_temp,'D:\\Temp\\') # 解压到 D:\Temp\ os.rename(f'D:\\Temp\\{f_temp}',f'D:\\Temp\\{f_name}') # 重新命名为中文
.extractall() 可以把压缩包里的所有文件解压到指定目录
格式:.extractall('解压到的位置') 如果不写则解压到当前目录
with zipfile.ZipFile('demo.zip','r') as zzz: zzz.extractall('文件夹1') # 把所有文件解压到 文件夹1 下面
解压带密码的压缩包
格式:.extractall('解压到的位置',pwd=b'密码')
with zipfile.ZipFile('Python.zip','r') as zzz: zzz.extractall('解压到这里',pwd=b'123456')
所以这里我们一个破解密码的可能,就是如果有一个密码列表,可以挨个试列表中的字符。或者知道密码的位数,就可以用遍历的方式暴力破解。
创建.zip压缩包
创建zip压缩包文件使用‘w’参数,同时用到.write()函数将指定文件添加到压缩包,使用方式是.write('被压缩的文件名或路径')。
注意,参数为'w'的话,如果存在同名sample.zip文件的话,会被新创建的覆盖掉。
with zipfile.ZipFile('sample.zip', 'w') as z: # 创建文件夹的话,参数为‘w’ z.write('file1.txt')
创建zip压缩包的时候,把多个文件批量添加到压缩包里,可以把文件名(路径)赋值给一个列表,然后用遍历的方式,把文件批量添加到压缩包里。
f_list = ['file1.txt','file2.txt','temp_file.png','./py/hello.py'] with zipfile.ZipFile('sample.zip','w') as z: for f_name in f_list: z.write(f_name)
向已有的zip压缩包里添加文件
上面提到,如果用'w'参数的话,那么向压缩包里添加文件,则会覆盖之前的压缩包。而向已有的压缩包添加文件,而不是替换这个压缩包的话,需要使用'a'参数,其他方法相同。
f_list = ['temp_folder.png','./py/game.py'] with zipfile.ZipFile('sample.zip','a') as z: for f_name in f_list: z.write(f_name)
如果压缩包里有同名文件,可以添加成功,但是会报警,提示1515: UserWarning: Duplicate name: 'temp_folder.png'.
更多Python相关文章点击:Python学习日志目录
下一篇:Python 使用openpyxl模块打开和读取 Excel 表格内容
上一篇:Python 创建、复制、移动、删除和重命名文件和文件夹
- 相关文章 -
Python 基础知识入门演示 - 2017-12-31
Python 数字与数字型运算 - 2020-09-08
Python 基础知识之数据类型 - 2020-09-07
Python 学习中非常好用的编辑器 Sublime Text 3 - 2020-09-07
Python 基础知识之变量 - 2020-09-03
Python 详细安装步骤图解 - 2020-09-01
Python 数据分析模块 Pandas 之 DataFrame 数据 - 2020-02-09
Python 数据分析模块 Pandas 之 Series 数据 - 2020-02-05
- 文章评论 -
- 最新评论[0条评论] -
版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 |
逍遥峡谷 ·
酷品优选
Copyright©Interstellar Central Occult Agency (I.C.O.A)
本局纯属虚构,如有雷同,纯属巧合