如何在无Hancom Office环境下用纯Python解析hwpx文件?
纯Python处理.hwpx文件方案
由于.hwpx是基于XML的压缩包(类似Office的docx格式),无需安装Hancom Office即可用纯Python工具解析提取内容,以下是可行方案:
1. 手动解析(无额外依赖,灵活可控)
hwpx本质是zip压缩包,先解压再读取内部XML结构:
- 用Python标准库
zipfile解压文件:import zipfile with zipfile.ZipFile("target.hwpx", "r") as zf: # 查看内部文件结构,确认核心文件位置 print(zf.namelist()) # 读取主内容XML文件 content_data = zf.read("Contents/content.xml").decode("utf-8") # 读取元数据XML文件 meta_data = zf.read("DocInfo/meta.xml").decode("utf-8") - 用标准库
xml.etree.ElementTree或第三方库lxml解析XML:- 文本内容一般在
<text:span>或<text:p>标签下 - 表格数据集中在
<table:table>相关节点 - 元数据(作者、创建时间等)可从
meta.xml中提取
- 文本内容一般在
2. 第三方库辅助简化
目前没有专门针对hwpx的成熟纯Python库,但可通过通用工具组合降低开发成本:
- lxml:支持XPath查询,比标准库XML解析更高效,便于精准定位节点
- pandas:解析表格数据后可直接转为DataFrame,轻松导出为JSON或Markdown格式
3. 导出为Markdown/JSON
解析得到内容后,可自行实现简单转换逻辑:
- 文本段落按换行分割,标题对应XML中的
<text:h>标签层级 - 表格遍历行与单元格,拼接成Markdown表格格式
- 所有提取内容(文本、表格、元数据)可通过
json.dump()直接导出为JSON
关键注意点
- hwpx的XML带有命名空间,解析时需指定前缀,示例:
import xml.etree.ElementTree as ET ns_map = { "text": "urn:oasis:names:tc:opendocument:xmlns:text:1.0", "table": "urn:oasis:names:tc:opendocument:xmlns:table:1.0" } root = ET.fromstring(content_data) # 提取所有段落 paragraphs = root.findall(".//text:p", ns_map) - 不同版本的hwpx可能存在XML结构差异,建议先解压样本文件确认节点路径
内容的提问来源于stack exchange,提问作者SxA
相关产品推荐
相关产品推荐

