实际上ofd、docx、xlsx等文件就是一个压缩文件,是可以被解压处理的。所以我们把一个ofd格式的发票文件解压后就可以看到它的目录,如下:



再用谷歌或者IE打开里面的xml属性的文件,就可以看到发票相关信息,如下:

所以获取发票信息的实现方法大致就是:先解压ofd格式文件,得到里面的OFD.xml文件,在通过解析xml文件获取到发票相关信息

解析xml文件

from xml.dom.minidom import parse

def get_info(dir_path, unzip_file_path=None, removed=True):
"""
:param dir_path: 压缩文件路径
:param unzip_file_path: 解压后的文件路径
:param removed: 是否删除解压后的目录
:return: ofd_info,字典形式的发票信息
"""
file_path = unzip_file(dir_path, unzip_file_path)
io = f"{file_path}/OFD.xml"
element = parse(io).documentElement
nodes = element.getElementsByTagName('ofd:CustomDatas')
ofd_info = {}
for i in range(len(nodes)):
sun_node = nodes[i].childNodes
for j in range(len(sun_node)):
name = sun_node[j].getAttribute('Name')
value = sun_node[j].firstChild.data
ofd_info[name] =value
if removed:
shutil.rmtree(unzip_path)
return ofd_info

解压ofd文件

import shutil
import zipfile def unzip_file(zip_path, unzip_path=None):
"""
:param zip_path: ofd格式文件路径
:param unzip_path: 解压后的文件存放目录
:return: unzip_path
"""
if not unzip_path:
unzip_path = zip_path.split('.')[0]
with zipfile.ZipFile(zip_path, 'r') as f:
for file in f.namelist():
f.extract(file, path=unzip_path) return unzip_path

结果显示

最新文章

  1. 【Java EE 学习 71 下】【数据采集系统第三天】【分析答案实体】【删除问题】【删除页面】【删除调查】【清除调查】【打开/关闭调查】
  2. python开发目录合并小工具 PathMerge
  3. CentOS下通过yum安装svn及配置
  4. 时间的处理 --java
  5. mysqlbinlog 参数及用法说明
  6. 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?
  7. 使用Sublime Text 2 编辑Markdown
  8. linux线程控制&线程分离
  9. Device Tree(一):背景介绍
  10. ADO.NET学习小结【1】正在更新...
  11. Java 不定长度参数
  12. android webview load 本地文件需要注意的地方
  13. Python 在Windows下安装matplotlib
  14. JAVA - 工厂模式
  15. PHP面向对象简单总结
  16. 编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可
  17. python/socket编程之粘包
  18. Code Signal_练习题_firstDigit
  19. 解决win10 关键错误开始菜单和cortana无法工作 的问题
  20. ubuntu 解压命令

热门文章

  1. mysql随机返回一条数据
  2. nginx重启报错 nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)
  3. 宿主机通过vmware创建的kali虚拟机连接redis,sftp等功能
  4. docker rabbitMQ安装
  5. Linux学习 --- 网络基础知识
  6. Python的入门学习之Day 9——from“夜曲编程”
  7. 00_k8s_learn
  8. AXI VALID READY 握手机制
  9. Eclipse设置背景色等
  10. vscode 终端中运行执行js文件