Python中读取ZIP文件
§01 压缩文件为了方便存储于交换文件,很多的数据文件通常以打包压缩的方式进行存储和传送。可以直接使用很多OS中的压缩打包程序完成压缩文件的打包压缩和解压过程。如何在Python下对于这些压缩文件进行存储呢?zipfile操作压缩文件根据 【python】详解zipfile模块读取处理压缩文件实例 介绍zipfile模块读取 压缩文件的实际操作。zipfile是python里用来做zi
简 介: 测试了zipfile对于压缩文件的读取和解压过程。
关键词
: zipfile
§01 压缩文件
为了方便存储于交换文件,很多的数据文件通常以打包压缩的方式进行存储和传送。可以直接使用很多OS中的压缩打包程序完成压缩文件的打包压缩和解压过程。如何在Python下对于这些压缩文件进行存储呢?
1.1 zipfile操作压缩文件
根据 【python】详解zipfile模块读取处理压缩文件实例 介绍zipfile模块读取 压缩文件的实际操作。
zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的。
下面的实验中,使用压缩有目录:animalfruit 的压缩文件作为练习,其中包含有907张图片。
├─animal
│ ├─cat
│ ├─cow
│ ├─dog
│ ├─horse
│ └─pig
└─fruit
├─apple
├─banana
├─durian
├─grape
└─orange
zipfile模块常用的一些操作和方法:
1.1.1 判断是否有效的zipfile
_zipfile(filename)
,测试filename
的文件,看它是否是个有效的zipfile
import zipfile
zipfilename = '/home/aistudio/data/data120001/FruitAnimal.zip'
print(zipfile.is_zipfile(zipfilename))
True
1.1.2 打开ZipFile
ZipFile(filename[,mode[,compression[,allowZip64]]])
- filename:文件对象;例如:’xxx.zip’
- mode:可选r,w,a代表不同的打开文件的方式;r只读;w重写;a添加;
- compression:指出这个zipfile用什么压缩方法,默认是ZIP_STORED,另一种选择是ZIP_DEFLATED;
- allowZip64:是个bool型变量,当设置为True的时候就是说可以用来创建大小大于2G的zip文件,默认值是True
zfile = zipfile.ZipFile(zipfilename, 'r')
print(zfile)
<zipfile.ZipFile filename='/home/aistudio/data/data120001/FruitAnimal.zip' mode='r'>
(1)infolist
with zipfile.ZipFile(zipfilename, 'r') as zfile:
print(zfile.infolist())
▲ 图1.1.1 infolist显示的信息
(2)namelist
with zipfile.ZipFile(zipfilename, 'r') as zfile:
nl = zfile.namelist()
il = zfile.infolist()
print(nl)
▲ 图1.1.2 namelist显示的信息
1.1.3 关闭ZipFile
z.close(),关闭文件,结束时必须要有。
zfile.close()
print(zfile)
<zipfile.ZipFile [closed]>
1.1.4 抽取文件
z.extract(member, path=None, pwd=None)
,从zip
中提取一个文件。
member
可以是namelist
中的某个文件,也可以从z.infolist
中得到filename
,将它放到指定的path
下,pwd
是密码,用于被加密的zip
文件;- 如果
path
没有指定,比如在脚本ipython
下运行,会提取保存在脚本默认根目录下,生成test_file
文件,并提取出a.text
文件保存在文件夹里;
with zipfile.ZipFile(zipfilename, 'r') as zfile:
nl = zfile.namelist()
il = zfile.infolist()
for id,l in enumerate(nl):
zfile.extract(l, path=outpath)
print(l)
fruit/
fruit/apple/
fruit/apple/01.png
fruit/apple/02.png
fruit/apple/03.png
fruit/apple/04.png
fruit/apple/05.png
fruit/apple/06.png
fruit/apple/07.png
fruit/apple/08.png
fruit/apple/09.png
需要注意: 在namelist中不仅仅保存了文件名称,而且也保存了子目录的名称。在解压缩过程中,需要按照namelist的目录和文件名称的顺序进行解压缩。也就是在文件解压缩之前,前面的目录也应该被正确的解压缩,否则输出的文件可能没有对应的正确的目录。
1.1.5 抽取所有文件
with zipfile.ZipFile(zipfilename, 'r') as zfile:
zfile.extractall(outpath)
运行之后,压缩文件中的所有文件都在Python文件当前目录下加压缩。
这个语句相当于前面extract函数执行完全不动作。
1.2 压缩文件
根据 【python】详解zipfile模块读取处理压缩文件实例 介绍使用zipfile压缩选取的文件。
1.2.1 压缩GIF目录下的文件
(1)压缩代码
gifdir = '/home/aistudio/GIF'
filedim = os.listdir(gifdir)
outfile = '/home/aistudio/gif.zip'
with zipfile.ZipFile(outfile, 'w') as f:
for fn in filedim:
f.write(os.path.join(gifdir, fn))
print("Compress GIF into gif.zip.")
▲ 图 Sint 图片
※ 总 结 ※
测试了zipfile对于压缩文件的读取和解压过程。
下面代码是对上载到data中的famnist.zip加压缩到data中。
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import zipfile
filename = '/home/aistudio/data/famnist.zip'
outpath = '/home/aistudio/data'
with zipfile.ZipFile(filename) as zfile:
zfile.extractall(outpath)
print("Zip file extract to dir : %s"%outpath)
■ 相关文献链接:
● 相关图表链接:
更多推荐
所有评论(0)