Python中的ZipFile模块

本文介绍如何使用Python的ZipFile模块优雅地解析Word的XML文件。通过更改Word文件的后缀名并利用ZipFile模块,可以轻松访问Word文档的结构和文本内容。文章详细解释了ZipFile和ZipInfo类的使用,以及如何读取和解压zip文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在做项目的时候,要求解析word的xml文件,经过研究发现,将word文件的后缀名改为.zip解压后就可以在word文件夹中找到一个名为document.xml的xml文件。里面包含了word的结构和所有文本内容。
在这里插入图片描述
但是作为一个python程序员,如何用python优雅的解决这个问题呢?这就需要使用Python中的ZipFile模块了。

zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo,在绝大多数的情况下,我们只需要使用这两个class就可以了。

  • ZipFile是主要的类,用来创建和读取zip文件。
  • ZipInfo是存储的zip文件的每个文件的信息的。

infolist(), 它返回的就是压缩包内所有文件的信息,就是一个ZipInfo的列表。一个ZipInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。
例:

zip_file = zipfile.ZipFile(filename, 'r')  
for zip in zip_file.infolist():  
      print(zip.file_size, zip.header_offset )

而我接下来用的namelist()就是读取的ZipInfo中的filename,组成一个 list返回

比如要读取一个解压一个zip文件模块,这里假设base_path是一个文件的路径:

import zipfile

os.chdir(base_path)                                 # 切换到base_path路径下
base_name = os.path.splitext(word_name)[0]          # 读取word文档后缀前的部分
os.rename(word_name, base_name + ".zip")            # 修改word文件的后缀为zip
zip_word = zipfile.ZipFile(base_name + ".zip", 'r') # 读取压缩文件 
for file in zip_word.namelist():                    # 遍历压缩包中所有文件名
       zip_word.extract(file)                       # 将文件解压

以下是一些常规压缩使用方法

#下面是创建zip压缩包的方法,与读取的方法其实很类似的:
import zipfile, os  
zip_file = zipfile.ZipFile(filename, 'w') 
# 注意这里的第二个参数是w,这里的filename是压缩包的名字

#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件)
if os.path.isdir(testdir):  
     zip_file = zipfile.ZipFile(zip_name, 'w') 
     for dir in os.listdir(testdir):  
         zip_file.write(testdir+os.sep+dir)  
         zip_file.close()   # close() 是必须调用的!  
# 代码非常的简单。
# 想想还有一个问题,如果我把一个test/111.txt 添加到压缩包里之后我希望在包里它放到test22/111.txt怎么办呢?
# 其实这个就是Python ZipFile模块的write方法中第二个参数的作用了。只需要这样调用:
zip_file .write("test/111.txt", "test22/111.txt")  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值