Python: zipfile压缩解压文件
admin
2023-07-30 20:59:41
0

判断是否是ZIP文件

zipfile.is_zipfile判断。

import zipfile
print(zipfile.is_zipfile(\'samples/archive.zip\'))
True

ZipFile可以直接操作ZIP,支持读取数据以及对其修改。

读取文件信息

List出来archive文件里内容,用namelistinfolist方法。返回list of filenameslist of ZipInfo instances

import zipfile
zf = zipfile.ZipFile(\'samples/archive.zip\',\'r\')
# list filenames
for name in zf.namelist():
    print name,
a.txt b.txt c.txt
# list file infomation
for info in zf.infolist():
    print info.filename, info.date_time, info.file_size
a.txt (2016, 7, 15, 0, 5, 58) 2
b.txt (2016, 7, 15, 0, 6, 8) 2
c.txt (2016, 7, 15, 0, 6, 14) 2

提取数据read()

read()方法,以filename作为参数,以string形式返回数据。

zf = zipfile.ZipFile(\'samples/archive.zip\')
for filename in zf.namelist():
    # can use other than namelist,[\'there.txt\',\'notthere.txt\']
    try:
        data = zf.read(filename) # extract use read()
    except KeyError:
        print \"Error: Did not find %s in zip file\" % filename
    else:
        print filename, \':\',
        print repr(data)
a.txt : \'a\\n\'
b.txt : \'b\\n\'
c.txt : \'c\\n\'

解压数据extract()

zf = zipfile.ZipFile(\'samples/archive.zip\',\'r\')
# Extract a member from the archive to the current working directory
zf.extract(\'a.txt\') # you may want to specify path param

# Extract all members from the archive to the current working directory
zf.extractall() # you may want to specify path param

压缩数据

创建新的zip文件,只需要初始化一个新的ZipFile即可,用w模式,要添加数据,用write()方法即可。

print(\'creating archive\')
zf = zipfile.ZipFile(\'zipfile_write.zip\',mode=\'w\')
try:
    print(\'adding readme.txt\')
    zf.write(\'readme.txt\')
finally:
    print(\'closing\')
    zf.close()
creating archive
adding readme.txt
closing

但是默认没有只是打包,没有压缩数据,如果压缩,需要用zlib模块。默认压缩模式zipfile.ZIP_STORED,可以改变为zipfile.ZIP_DEFLATED

# try to change compression type
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 README.txt with compression mode\'+ str(modes[compression]))
    zf.write(\'readme.txt\',compress_type=compression)
finally:
    print(\'closing\')
    zf.close()
creating archive
adding README.txt with compression modedeflated
closing

Ref:

  • Effbot
  • Python Module of the Week

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...