zipfile模块是python中一个处理压缩文件的模块,解决了不少我们平常需要处理压缩文件的需求 ,本文主要谈谈zipfile几个常用的用法。

 

首先我在Windows操作系统中创建如下的文件目录:

python tar压缩文件夹 python的zipfile压缩文件夹_python tar压缩文件夹

 

一、读取压缩文件:

代码:

import zipfile
import os
 
# 压缩文件路径
zip_file_path = r'F:\压缩文件zipfile\zipfile_dir.zip'
# 压缩文件目录路径
zip_dir = r'F:\压缩文件zipfile\zipfile_dir'
 
# 打开压缩文件
zip_files = zipfile.ZipFile(zip_file_path,mode='r')
# 获取zip压缩文件的相关信息
for content in zip_files.infolist():
    print(content)
# 遍历zip压缩文件的文件名称
for name in zip_files.namelist():
    print(name)
 
# 记得要像读取file那样关闭文件句柄
zip_files.close()

 

python tar压缩文件夹 python的zipfile压缩文件夹_压缩文件_02

 

 

压缩文件的名称、压缩算法和大小等信息


<ZipInfo filename='zipfile_dir/test1.txt' compress_type=deflate external_attr=0x20 file_size=2918 compress_size=1591>
<ZipInfo filename='zipfile_dir/test2.txt' compress_type=deflate external_attr=0x20 file_size=2918 compress_size=1591>
<ZipInfo filename='zipfile_dir/' external_attr=0x10>

 

压缩文件目录下所有文件的名称


zipfile_dir/test1.txt
zipfile_dir/test2.txt
zipfile_dir/

  

二、往zip目录中添加文件

代码:

# 在指定zip压缩文件目录下创建zip文件
create_zip_file = zipfile.ZipFile(zip_file_path, mode='a', compression=zipfile.ZIP_DEFLATED)
new_file_path = os.path.join(zip_dir,r'README.txt')
# 将文件夹中的文件拷贝进zip目录
file_name = 'README.txt'
create_zip_file.write(new_file_path,file_name)
create_zip_file.close()

 

注意:加入zip目录的文件本身在文件夹中已经存在,否则zipfile模块搜索路径是无法找到的。

 

添加成功:

python tar压缩文件夹 python的zipfile压缩文件夹_python_03

 

三、解压文件:

zipfile提供的压缩方法有:

ZIP_STORED,ZIP_DEFLATED, ZIP_BZIP2和ZIP_LZMA

ZIP_STOREED:只是作为一种存储,实际上并未压缩

ZIP_DEFLATED:用的是gzip压缩算法

ZIP_BZIP2:用的是bzip2压缩算法

ZIP_LZMA:用的是lzma压缩算法

 

gzip和bzip2压缩算法的区别:

使用 gzip要比bzip2快,但是bzip2会获得比 gzip更高的压缩率,即bzip压缩后的压缩文件跟小。

 

代码:

# 解压后文件放置的目录
unzip_dir = r'F:\tk_demo_test'
# 解压前文件的zip目录
zip_file2_path = r'F:\tk_demo.zip'
unzip_files = zipfile.ZipFile(zip_file2_path,mode='r',compression=zipfile.ZIP_DEFLATED)
unzip_files.extractall(unzip_dir)
unzip_files.close()

 

解压成功:

python tar压缩文件夹 python的zipfile压缩文件夹_python_04

 

更多内容,请参考官方文档:https://docs.python.org/3/library/zipfile.html#zipfile.ZIP_STORED