当前位置: 首页 > news >正文

权威的建筑工程网站福州一站式品牌推广运营公司

权威的建筑工程网站,福州一站式品牌推广运营公司,长沙营销网站建站公司,电子商务师证怎么考zipfile — 访问 ZIP 压缩文件 1.概述 zipfile 模块可用于操作 ZIP 存档文件,.zip 是 PC 程序 PKZIP 推广的格式 2.测试数据 为了演示用,你需要创建以下三个文件 1.README.txt 内容如下,注意最后一行为空行 The examples for the zipfil…

zipfile — 访问 ZIP 压缩文件

1.概述

zipfile 模块可用于操作 ZIP 存档文件,.zip 是 PC 程序 PKZIP 推广的格式

2.测试数据

为了演示用,你需要创建以下三个文件
1.README.txt 内容如下,注意最后一行为空行

The examples for the zipfile module use 
this file and example.zip as data.

2.使用压缩软件将 README.txt 压缩为 example.zip,压缩式选储存选项,不需要压缩
3.新建一个空的文本文档,并改名为 bad_example.zip

3.测试 ZIP 文件

is_zipfile() 函数返回一个布尔值,指示作为参数传递的文件名是否指向有效的 ZIP 存档

import zipfilefor filename in ['README.txt', 'example.zip','bad_example.zip', 'notthere.zip']:print('{:>15}  {}'.format(filename, zipfile.is_zipfile(filename)))

如果文件根本不存在,is_zipfile() 返回 False

README.txt  Falseexample.zip  True
bad_example.zip  Falsenotthere.zip  False

4.从 Zip 存档中读取元数据

使用 ZipFile 类直接处理 Zip 存档文件。它支持从现有存档中读取数据,也支持向现有存档中加入文件、修改存档。

4.1.查看zip包所有文件列表

import zipfilewith zipfile.ZipFile('example.zip', 'r') as zf:print(zf.namelist())

namelist() 方法以列表的形式返回已有存档中所有的文件名

['README.txt']

存档中的文件名列表只是存档中可用信息的一小部分。可以使用 infolist() 或 getinfo() 方法访问 Zip 文件的全部元数据。

4.2.查看zip包元数据

import datetime
import zipfiledef print_info(archive_name):with zipfile.ZipFile(archive_name) as zf:for info in zf.infolist():print(info.filename)print('  Comment     :', info.comment)mod_date = datetime.datetime(*info.date_time)print('  Modified    :', mod_date)if info.create_system == 0:system = 'Windows'elif info.create_system == 3:system = 'Unix'else:system = 'UNKNOWN'print('  System      :', system)print('  ZIP version :', info.create_version)print('  Compressed  :', info.compress_size, 'bytes')print('  Uncompressed:', info.file_size, 'bytes')print()if __name__ == '__main__':print_info('example.zip')

除了以上输出信息之外,Zip 存档还包含额外的数据。不过你需要仔细阅读 PKZIP 应用注释 中的 Zip 格式相关的部分,然后才能把这些附加数据解密为有用的信息。

README.txtComment     : b''Modified    : 2010-11-15 06:48:02System      : UnixZIP version : 30Compressed  : 65 bytesUncompressed: 76 bytes

如果你已经预先知道了 Zip 存档中某个文件的名字。你可以通过 getinfo() 方法直接得到它的 ZipInfo 对象。

import zipfilewith zipfile.ZipFile('example.zip') as zf:for filename in ['README.txt', 'notthere.txt']:try:info = zf.getinfo(filename)except KeyError:print('ERROR: Did not find {} in zip file'.format(filename))else:print('{} is {} bytes'.format(info.filename, info.file_size))

如果存档中的某个文件不存在,调用 getinfo() 方法会产生一个 KeyError

README.txt is 76 bytes
ERROR: Did not find notthere.txt in zip file

5.从 Zip 存档中读取文件内容

要访问存档中的数据,可以将文件名传递给 read() 方法,返回结果为对应文件的内容。

import zipfilewith zipfile.ZipFile('example.zip') as zf:for filename in ['README.txt', 'notthere.txt']:try:data = zf.read(filename)except KeyError:print('ERROR: Did not find {} in zip file'.format(filename))else:print(filename, ':')print(data)print()

如果有必要,数据会被自动解压

README.txt :
b'The examples for the zipfile module use \nthis file and exampl
e.zip as data.\n'ERROR: Did not find notthere.txt in zip file

6.创建zip压缩包

6.1.只归档文件默认不压缩文件

要创建新的 Zip 存档,需要以 ‘w’ 模式实例化一个 ZipFile 对象,存档中任何现有的文件都会被清空,相当于新建一个存档开始写入。如果你想要向现有存档中添加文件,你可以使用 write() 方法。

from zipfile_infolist import print_info
import zipfileprint('creating archive')
with zipfile.ZipFile('write.zip', mode='w') as zf:print('adding README.txt')zf.write('README.txt')print()
print_info('write.zip')

默认情况下,存档的文件不会被压缩。

creating archive
adding README.txtREADME.txtComment     : b''Modified    : 2016-08-07 13:31:24System      : UnixZIP version : 20Compressed  : 76 bytesUncompressed: 76 bytes

6.2.归档并压缩文件

要实现压缩功能,需要使用 zlib 模块。如果 zlib 模块可用,你可以使用 zipfile.ZIP_DEFLATED 选项,让 zipfile 进入对单独的文件或整个存档进行压缩的模式。默认的压缩设置是 zipfile.ZIP_STORED,这种模式下 zipfile 只会将文件添加进存档而不压缩它。

from zipfile_infolist import print_info
import zipfile
try:import zlibcompression = zipfile.ZIP_DEFLATED
except (ImportError, AttributeError):compression = zipfile.ZIP_STOREDmodes = {zipfile.ZIP_DEFLATED: 'deflated',zipfile.ZIP_STORED: 'stored',
}print('creating archive')
with zipfile.ZipFile('write_compression.zip', mode='w') as zf:mode_name = modes[compression]print('adding README.txt with compression mode', mode_name)zf.write('README.txt', compress_type=compression)print()
print_info('write_compression.zip')

此时,存档内容已被压缩了

creating archive
adding README.txt with compression mode deflatedREADME.txtComment     : b''Modified    : 2016-08-07 13:31:24System      : UnixZIP version : 20Compressed  : 65 bytesUncompressed: 76 bytes

6.3.重命名文件

给 write() 方法传递一个 arcname 值,你就可以将文件以新的文件名加入存档。等价于将文件改名后再加入存档

from zipfile_infolist import print_info
import zipfilewith zipfile.ZipFile('write_arcname.zip', mode='w') as zf:zf.write('README.txt', arcname='NOT_README.txt')print_info('write_arcname.zip')

如你所见,存档中的文本文件没有使用原来的文件名

NOT_README.txtComment     : b''Modified    : 2016-08-07 13:31:24System      : UnixZIP version : 20Compressed  : 76 bytesUncompressed: 76 bytes

6.4.内存数据写入压缩包

有时候你需要将某个字符串写入 Zip 存档,而不是将现有的文件加入存档。你不需要先把字符串写入文件,然后再将文件写入存档,通过 writestr() 方法,你可以直接将字节流的字符串写入 Zip 存档。

from zipfile_infolist import print_info
import zipfilemsg = 'This data did not exist in a file.'
with zipfile.ZipFile('writestr.zip',mode='w',compression=zipfile.ZIP_DEFLATED,) as zf:zf.writestr('from_string.txt', msg)print_info('writestr.zip')with zipfile.ZipFile('writestr.zip', 'r') as zf:print(zf.read('from_string.txt'))

以上示例中,传递给 ZipFile 的 compress_type 参数指定了需要压缩数据,因为 writestr() 方法不支持指定是否压缩的参数。

from_string.txtComment     : b''Modified    : 2016-12-29 12:14:42System      : UnixZIP version : 20Compressed  : 36 bytesUncompressed: 34 bytesb'This data did not exist in a file.'

6.5.修改zip元数据

通常情况下,当你向存档加入新文件或写入字符串时,存档的修改日期会自动被计算并更新。你可以将 一个 ZipInfo 实例传递给 writestr() 方法,这样你就可以自定义存档的修改日期以及其它的元数据了。

import time
import zipfile
from zipfile_infolist import print_infomsg = b'This data did not exist in a file.'with zipfile.ZipFile('writestr_zipinfo.zip',mode='w',) as zf:info = zipfile.ZipInfo('from_string.txt',date_time=time.localtime(time.time()),)info.compress_type = zipfile.ZIP_DEFLATEDinfo.comment = b'Remarks go here'info.create_system = 0zf.writestr(info, msg)print_info('writestr_zipinfo.zip')

在这个例子里,修改时间定为当前时间、数据被压缩了、使用了一个假的 create_system 值「原作者使用 Unix 系统,对应的 create_system 值为 3,而这里设置为 0 对应 Windows 系统」并加上了一条简单的注释。

from_string.txtComment     : b'Remarks go here'Modified    : 2016-12-29 12:14:42System      : WindowsZIP version : 20Compressed  : 36 bytesUncompressed: 34 bytes

6.6.追加文件

除了创建新文件外,我们也可以向已有的存档中追加新文件,或者向现存的文件尾部追加新的存档,现有的文件可以是 .exe 文件或者自解压存档。要打开文件并在尾部追加内容,请使用 ‘a’ 模式。

from zipfile_infolist import print_info
import zipfileprint('creating archive')
with zipfile.ZipFile('append.zip', mode='w') as zf:zf.write('README.txt')print()
print_info('append.zip')print('appending to the archive')
with zipfile.ZipFile('append.zip', mode='a') as zf:zf.write('README.txt', arcname='README2.txt')print()
print_info('append.zip')

输出的档案包含两个文件

creating archiveREADME.txtComment     : b''Modified    : 2016-08-07 13:31:24System      : UnixZIP version : 20Compressed  : 76 bytesUncompressed: 76 bytesappending to the archiveREADME.txtComment     : b''Modified    : 2016-08-07 13:31:24System      : UnixZIP version : 20Compressed  : 76 bytesUncompressed: 76 bytesREADME2.txtComment     : b''Modified    : 2016-08-07 13:31:24System      : UnixZIP version : 20Compressed  : 76 bytesUncompressed: 76 bytes

7.python文件存档

Python 可以通过 zipimport 从 sys.path 路径中的 Zip 存档内导入模块。我们可以将已经编写好的
PyZipFile 类构造成一个可以这样使用的模块。额外的 writepy() 方法告诉 PyZipFile 扫描当前目录下的每一个 .py 文件,并将对应的 .pyo 或 .pyc 文件添加进 Zip 存档。如果两种格式的文件都不存在,新的 .pyc 文件会被编译并加入存档中。

import sys
import zipfileif __name__ == '__main__':with zipfile.PyZipFile('pyzipfile.zip', mode='w') as zf:zf.debug = 3print('Adding python files')zf.writepy('.')for name in zf.namelist():print(name)print()sys.path.insert(0, 'pyzipfile.zip')import zipfile_pyzipfileprint('Imported from:', zipfile_pyzipfile.__file__)

当 PyZipFile 的调试属性被设为 3 时,编译每一个 .py 文件时都会出详细的调试信息。

Adding python files
Adding files from directory .
Compiling ./zipfile_append.py
Adding zipfile_append.pyc
Compiling ./zipfile_getinfo.py
Adding zipfile_getinfo.pyc
Compiling ./zipfile_infolist.py
Adding zipfile_infolist.pyc
Compiling ./zipfile_is_zipfile.py
Adding zipfile_is_zipfile.pyc
Compiling ./zipfile_namelist.py
Adding zipfile_namelist.pyc
Compiling ./zipfile_printdir.py
Adding zipfile_printdir.pyc
Compiling ./zipfile_pyzipfile.py
Adding zipfile_pyzipfile.pyc
Compiling ./zipfile_read.py
Adding zipfile_read.pyc
Compiling ./zipfile_write.py
Adding zipfile_write.pyc
Compiling ./zipfile_write_arcname.py
Adding zipfile_write_arcname.pyc
Compiling ./zipfile_write_compression.py
Adding zipfile_write_compression.pyc
Compiling ./zipfile_writestr.py
Adding zipfile_writestr.pyc
Compiling ./zipfile_writestr_zipinfo.py
Adding zipfile_writestr_zipinfo.pyc
zipfile_append.pyc
zipfile_getinfo.pyc
zipfile_infolist.pyc
zipfile_is_zipfile.pyc
zipfile_namelist.pyc
zipfile_printdir.pyc
zipfile_pyzipfile.pyc
zipfile_read.pyc
zipfile_write.pyc
zipfile_write_arcname.pyc
zipfile_write_compression.pyc
zipfile_writestr.pyc
zipfile_writestr_zipinfo.pycImported from: pyzipfile.zip/zipfile_pyzipfile.pyc
http://www.yayakq.cn/news/726488/

相关文章:

  • 沈阳高端网站制作公司产品宣传画册设计
  • 369网站建设中心志愿海南网站
  • 国内企业网站模板wordpress百度网站地图
  • 海尔网站推广方法律师做网站
  • 河源东莞网站建设ps做网站导航条高度
  • 正规网站建设推荐东莞保安公司有多少家
  • 关于网站开发人员保密协议地方网站类型
  • ftp网站上传 方法网站推广计划至少应包括
  • 网站登录页模板做设计任务的网站
  • 网站建设公司天津网站的服务器怎么做的
  • 网站icp备案信息注册成都手机模板建站
  • 垂直网站建设方案网页设计开发培训班
  • 中国哪家做网站的公司最大天猫官方网站
  • 免费自己做网站软件室内装修设计上海
  • 建设微网站WordPress需要什么配置
  • 网站建设公司问答营销案例网站按钮样式
  • 如何k掉别人的网站做网站如何团队分工
  • 北京建站公司兴田德润专业软件开发工具及公司
  • wps上怎么做网站点击分析表a公司与企业k签订了建设k企业
  • 庆阳工程建设网站怎么看网站是谁家做的
  • 本地wordpress站点上传网站如何生成app
  • 基于html的个人网站的设计与实现论文wordpress view插件
  • 网站支付平台是怎么做的我公司想做网站
  • 溧水网站建设西宁微信网站建设
  • fullpage做的网站网站建设付款方式
  • 爱互融网站开发合同深圳市住房和建设局网站-%3e认租申请
  • 哪家公司做跳转网站多语言企业网站源码
  • 免费网站安全软件大全免费下载乐陵seo快速排名
  • 微信公众号做网站河北省住房和城市建设厅网站
  • 个人网站如何建设用淘宝域名做网站什么效果