lrmx格式文件解析
前言
偶然的机会,接触到了lrmx格式的文件,就用Python写了一点代码对文件进行了解析,在这里简单梳理一下。
lrmx文件格式
在网上搜了一下lrmx文件格式,发现相关的信息寥寥无几,真正有用的有以下这么几条:
大概总结一下:
- lrmx似乎是跟叫“干部任免审批表编辑器”的软件有关;
- lrmx编辑器可以用Python打开。
lrmx文件编辑器
顺着线索1,我们继续搜索,发现了“干部任免审批表编辑器”这个软件,并且从共产党员网(http://www.12371.cn/zgrjxz/rmbbjq/)上下载了下来,安装好以后是这个样子(图标是大写的**ZZB**),看上去就是一个填写Word、Excel或者PDF表格的东西,填写好的文档保存以后就是lrmx文件。
到这里就基本明了了——lrmx是这个编辑器专用的格式。怪不得找不到什么信息!
lrmx文件结构
如果是专用的格式,我们是不是就无法用Python进行处理了?还是要先转成Word再去想办法?
莫慌,线索2给了提示:可以用Python读写lrmx格式的文件。
lrmx看上去像是个文本文件,我们先填好一个,然后用Notepad++打开看一下:
这一下就明白了:lrmx用的其实是xml(可扩展标记语言,Extensible Markup Language),那显然就可以用Python解析XML的方法来解析。
Python提取lrmx文件信息
根据维基百科介绍,XML指可扩展标记语言,被广泛用来作为跨平台之间交互数据的形式,主要针对数据的内容,通过不同的格式化描述手段(XSLT,CSS等)可以完成最终的形式表达(生成对应的HTML,PDF或者其他的文件格式)。
常见的 XML 编程接口有 DOM 和 SAX,Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree。在这里我们使用DOM接口解析lrmx。
用xml.dom解析lrmx
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后我们可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
lrmx文件其实很小,而我们要解析的信息既有前面的,也有后面的,所以用DOM就比较方便。
- 调用
xml.dom.minidom.parse()
方法打开lrmx文件,记为dom; - 然后用
dom.documentElement
得到文档元素对象,记为root; - 假设我们提取姓名这一元素,则可以使用
root.getElementsByTagName()
去解析相应的标签; - 最后把解析除的内容导出即可。
具体实例如下:
1 | #打开xml文档 |
文件批量读取
其实这一块,没有太多可以说的。主要就是以下几条吧(参考stack overflow上的回答,):
Python 3.5+
- 法1:用
glob.glob()
函数,用**
匹配,传入recursive=True
的参数。 - 法2:用
pathlib.Path.rglob()
函数。
1 | from pathlib import Path |
旧版本Python
- 用
os.walk()
递归遍历目录; - 用
fnmatch.filter
匹配文件格式等。
1 | import fnmatch |
此外,对于以.
开头的文件或目录,也建议采用os.walk()
的方法。
小结
在这里,借用朋友的一段话作为总结:
磨刀不误砍柴工,如果你接到一项特别复杂的任务,第一,搞清楚目标产出;第二,盘点资源;第三,在利用资源的方式上下功夫,通过变通资源组织方式提高效率!
一个人一件小事、一个组织一件大事、甚至一个国家一项事业,莫不如此。