python zipfile_python zipfile模块学习笔记(一)

python zipfile_python zipfile模块学习笔记(一)ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建、读取、写入、附加和列出一个ZIP文件。使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程很慢。1、测试是否为ZIP文件is_zipfile()函数会返回一个布尔值来表示是否为ZIP文件,代码如下:#!/usr/bin/pythonimportzipfileforfilenamein…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建、读取、写入、附加和列出一个ZIP文件。使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程很慢。

1、测试是否为ZIP文件

is_zipfile()函数会返回一个布尔值来表示是否为ZIP文件,代码如下:

#!/usr/bin/python

import zipfile

for filename in [‘print_name.py’, ‘python.zip’, ‘uwsgi’, ‘admin’]:

print ‘%20s %s’ % (filename, zipfile.is_zipfile(filename))

如果文件不存在或者不是ZIP文件会返回False。

[root@www home]# python zipfile_is_zipfile.py

print_name.py False

python.zip True

uwsgi False

admin False

2、读取ZIP文件的内容

#!/usr/bin/env python

import zipfile

zf = zipfile.ZipFile(‘python.zip’, ‘r’)

print zf.namelist()

使用namelist() 函数,返回结果是一个列表

[root@www home]# python zipfile_namelist.py

[‘test.txt’]

#这只能查看ZIP文件的部分内容,使用infolist() 或者 getinfo() 可以从ZIP文件中获取更多信息,代码如下:

import datetime

import zipfile

def print_info(archive_name):

zf = zipfile.ZipFile(archive_name)

for info in zf.infolist():

print info.filename

print ‘\tComment:\t’, info.comment

print ‘\tModified:\t’, datetime.datetime(*info.date_time)

print ‘\tSystem:\t\t’, info.create_system, ‘(0 = Windows, 3 = Unix)’

print ‘\tZIP version:\t’, info.create_version

print ‘\tCompressed:\t’, info.compress_size, ‘bytes’

print ‘\tUncompressed:\t’, info.file_size, ‘bytes’

print

if __name__ == ‘__main__’:

print_info(‘python.zip’)

执行上面代码显示如下结果:

[root@www home]# python zipfile_infolist.py

test.txt

Comment:

Modified:   2013-09-06 20:09:58

System:     3 (0 = Windows, 3 = Unix)

ZIP version:    20

Compressed: 419430400 bytes

Uncompressed:   419430400 bytes

使用getinfo()函数可以在ZIP文件内查找内容,代码如下:

#!/usr/bin/env python

import zipfile

zf = zipfile.ZipFile(‘python.zip’)

for filename in [‘test.txt’, ‘notthere.txt’]:

try:

info = zf.getinfo(filename)

except KeyError:

print ‘ERROR: Did not find %s in zip file’ % filename

else:

print “%s is %d bytes” % (info.filename, info.file_size)

如果需要查找的不存在ZIP文档里,会返回一个KeyError错误。

[root@www home]# python zipfile_getinfo.py

test.txt is 419430400 bytes

ERROR: Did not find notthere.txt in zip file

3、从一个ZIP文档中提取文件

#!/usr/bin/env python

import zipfile

zf = zipfile.ZipFile(‘python.zip’)

for filename in [‘test.txt’, ‘notihere.txt’]:

try:

data = zf.read(filename)

except KeyError:

print ‘ERROR: Did not find %s in zip file’ % filename

else:

print filename, ‘:’

print repr(data)

print

要提取的文件会被自动解压:

[root@www home]# python zipfile_read.py

README.txt :

‘The examples for the zipfile module use this file and example.zip as data.\n’

ERROR: Did not find notthere.txt in zip file

4、创建一个新的ZIP文件

创建新的ZIP归档文件代码如下:

#!/usr/bin/env python

from zipfile_infolist import print_info

import zipfile

print ‘creating archive’

zf = zipfile.ZipFile(‘zipfile_write.zip’, ‘w’)

try:

print ‘adding text.txt’

zf.write(‘text.txt’)

finally:

print ‘closing’

zf.close()

print

print_info(‘zipfile_write.zip’)

默认情况下不会对文件进行压缩:

[root@www home]# python zipfile_write.py

creating archive

adding text.txt

closing

text.txt

Comment:

Modified:   2013-09-06 20:39:52

System:     3 (0 = Windows, 3 = Unix)

ZIP version:    20

Compressed: 104857600 bytes

Uncompressed:   104857600 bytes

如果要对文件进行压缩,zlib模块是必须的,如果zlib可以使用,你可以使用zipfile.ZIP_DEFLATED设置压缩模式为单个文件或者归档一个整体。默认的压缩模式是zipfile.ZIP_STORED。

#!/usr/bin/env python

from zipfile_infolist import print_info

import zipfile

try:

import zlib

compression = zipfile.ZIP_DEFLATED

except:

compression = zipfile.ZIP_STORED

modes = { zipfile.ZIP_DEFLATED: ‘deflated’,

zipfile.ZIP_STORED:   ‘stored’,

}

print ‘creating archive’

zf = zipfile.ZipFile(‘zipfile_write_compression.zip’, mode=’w’)

try:

print ‘adding text.txt with compression mode’, modes[compression]

zf.write(‘text.txt’, compress_type=compression)

finally:

print ‘closing’

zf.close()

print

print_info(‘zipfile_write_compression.zip’)

这次文件被压缩:

[root@www home]# python zipfile_write_compression.py

creating archive

adding text.txt with compression mode deflated

closing

text.txt

Comment:

Modified:   2013-09-06 20:39:52

System:     3 (0 = Windows, 3 = Unix)

ZIP version:    20

Compressed: 101923 bytes

Uncompressed:   104857600 bytes

替换原始文件名:

#!/usr/bin/env python

from zipfile_infolist import print_info

import zipfile

zf = zipfile.ZipFile(‘zipfile_write_arcname.zip’, mode=’w’)

try:

zf.write(‘text.txt’, arcname=’NOT_README.txt’)

finally:

zf.close()

print_info(‘zipfile_write_arcname.zip’)

结果显示原始文件名已经被替换了:

[root@www home]# python zipfile_write_arcname.py

NOT_README.txt

Comment:

Modified:   2013-09-06 20:39:52

System:     3 (0 = Windows, 3 = Unix)

ZIP version:    20

Compressed: 104857600 bytes

Uncompressed:   104857600 bytes

更多博文请移步:linux开源技术博客 http://www.chlinux.net

本文参考:http://docs.python.org/2/library/zipfile

http://pymotw.com/2/zipfile/

©著作权归作者所有:来自51CTO博客作者1594cqb的原创作品,如需转载,请注明出处,否则将追究法律责任

归档pythonzippython

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192497.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月13日 下午10:22
下一篇 2025年12月13日 下午11:01


相关推荐

  • 动态路由协议简单理解

    动态路由协议简单理解一 什么是路由 nbsp nbsp nbsp nbsp nbsp nbsp 在一个网络中 路由是一个非常基本的概念 当路由器 或者其他三层设备 收到一个 IP 数据包 路由器会找出报文中的 IP 头里的目的 IP 地址 然后拿着目的 IP 地址到自己的路由表中进行查找 找到 最匹配 的路由条目后 将数据包根据路由条目所指示的出接口或下一跳 IP 转发出去 随着网络路由的发展 路由的种类有很多 如静态路由 动态路由 缺省路由等 二 路由协议的分类 nbsp nbsp nbsp nbsp nbsp amp nb

    2026年3月19日
    2
  • CTF-UPX脱壳加壳讲解;(详细版)

    CTF-UPX脱壳加壳讲解;(详细版)在做CTF-RE题的时候,下载的题目附件会发现缺少函数方法的现象,说明这个文件就被加壳处理了;这个是加壳状态下的;脱壳后~~~~~~~如何发现是加壳的呢?除了开头所描述的方法,还有第二种用ExeinfoPE软件查看附件信息;此时这个软件就提示我们这个附件是UPX加壳处理的;二.脱壳这里我只讲一种方法(因为我只会一种方法-.-)首先下载好打包好的UPX脱壳工具,解压下载好:讲一下用法吧在这个文件夹当中输入cmd进入;输入upx.exe-h有如下反应:

    2022年7月19日
    71
  • 玩转电源设计,8个优选逆变电源参考方案大合辑

    玩转电源设计,8个优选逆变电源参考方案大合辑利用晶闸管电路把直流电转变成交流电,这种对应于整流的逆向过程,定义为逆变。例如:应用晶闸管的电力机车,当下坡时使直流电动机作为发电机制动运行,机车的位能转变成电能,反送到交流电网中去。又如运转着的直流电动机,要使它迅速制动,也可让电动机作发电机运行,把电动机的动能转变为电能,反送到电网中去。1、基于STM32单片机SPWM逆变电源设计功能描述:单片机采用:STM32单片机(型号:STM32F030F4P6)输出:正弦波频率:可调;幅值:可调;SPWM逆变原理:单片机SPWM驱动H桥+后级滤

    2022年6月6日
    30
  • servlet的基本原理_简述arp的工作原理

    servlet的基本原理_简述arp的工作原理Web技术成为当今主流的互联网Web应用技术之一,而Servlet是JavaWeb技术的核心基础。因而掌握Servlet的工作原理是成为一名合格的JavaWeb技术开发人员的基本要求。本文将带你认识JavaWeb技术是如何基于Servlet工作,以Tomcat为例了解Servlet容器是如何工作的?一个Web工程在Servlet容器中是如何启动的?

    2022年10月4日
    6
  • 15 Redis 实现消息队列

    15 Redis 实现消息队列15Redis 实现消息队列前言一 消息队列的消息存取需求二 基于 Streams 的消息队列解决方案总结前言消息队列要能支持组件通信消息的快速读写 而 Redis 本身支持数据的高速访问 正好可以满足消息队列的读写性能需求 消息队列的特征和 Redis 提供的消息队列方案 把这两方面的知识和实践经验串连起来 理解基于 Redis 实现消息队列的技术实践 以后当需要为分布式系统组件做消息队列选型时 可以根据组件通信量和消息通信速度的要求 选择出适合的 Redis 消息队列方案 一 消息队列的消息存取

    2026年3月19日
    2
  • 全网都在玩 nano banana 生成手办,但这个 AI 真能给你做出来

    全网都在玩 nano banana 生成手办,但这个 AI 真能给你做出来

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号