简 介: 测试了zipfile对于压缩文件的读取和解压过程。

关键词 zipfile

压缩文件
目 录
Contents
zipfile操
作压缩文件
判断是否有
效的zipfile
打开ZipFile
关闭ZipFile
抽取文件
抽取所有文件
压缩文件
压缩GIF目
录下的文件
总 结

 

§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显示的信息

▲ 图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.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 图片

▲ 图 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)


■ 相关文献链接:

● 相关图表链接:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐