文章目录

  • 定义文件
  • 配置文件
  • 组件方法
  • 文件解析
  • 数据库写入

pdm文件实际以xml的格式存储

需求场景:需要将pdm的文件解析为数据库中的元数据;

项目结构:

E:.│  common.py
│  main.py
│  tableddl.sql
│
├─conf
│      env_conf.yaml
│
├─pdmDir
│      xxxxxx.pdm
│
└─__pycache__common.cpython-39.pyc

定义文件

  • tableddl.sql 内容
-- Create table
create table T_PARSE_OBJECTS_FROMPDM
(object_name      VARCHAR2(100) not null,object_type      VARCHAR2(50) not null,object_comments  VARCHAR2(1000),object_ddl       CLOB,creationdate     DATE,creator          VARCHAR2(100),modificationdate DATE,modifier         VARCHAR2(100),sc_sj            DATE
);-- Create table
create table T_PARSE_COLUMNS_FROMPDM
(object_name      VARCHAR2(300) not null,column_name      VARCHAR2(4000) not null,column_id        NUMBER,pk_flag          VARCHAR2(30),data_type        VARCHAR2(300),data_length      NUMBER,data_precision   NUMBER,data_scale       NUMBER,nullable         VARCHAR2(30),column_comments  VARCHAR2(1000),creationdate     DATE,creator          VARCHAR2(100),modificationdate DATE,modifier         VARCHAR2(100),sc_sj            DATE
);

配置文件

env_conf.yaml 环境配置内容如下:

# 配置环境信息和输出对象target_db:mainFlag: TruedbType: oraclehost: xx.xx.xx.xxport: 1530dbsid: xxxusername: xxxxpassword: xxxxoutput_object:target_list:name: t_xxx_frompdmstru: [object_name, object_type, object_comments, object_ddl, creationdate, creator, modificationdate, modifier, sc_sj]target_columns:name: t_xxx_frompdmstru: [object_name, column_name, column_id, pk_flag, data_type, data_length, data_precision, data_scale, nullable, column_comments, creationdate, creator, modificationdate, modifier, sc_sj]pdm_info:name: "xxxxxxxx.pdm"

说明:Pdm 文件放到 ./pdmDir/ 下,配置文件放置在 ./conf/ 下;

组件方法

  • cx_Oracle的连接池,实现单个线程的 connection 获取;
  • xml.etree.ElementTree 的 xpath 对象查找;
  • concurrent.futures 的 线程池,实现对象的并行解析和入库;
  • yaml 配置文件解析;

文件解析

main.py 代码如下:

# -*- coding= utf-8 -*-
"""
@DevTool  : PyCharm
@Author   : xxx
@DateTime : 2022/8/2 15:19
@FileName : main.py
"""
import sys
import xml.etree.ElementTree as et
import os.path
import yaml
import time
from datetime import datetime
import threading
from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import as_completed
import common
import cx_Oracleif __name__ == "__main__":conf_path = os.getcwd() + '\conf\env_conf.yaml'with open(conf_path, mode="r", encoding="utf-8") as f:yamlConf = yaml.load(f.read(), Loader=yaml.FullLoader)# 获取目标库环境信息dbType = yamlConf["target_db"]["dbType"]host = yamlConf["target_db"]

Python—pdm解析相关推荐

  1. 了解女友的心还不如了解Python之在Python中解析和修改XML

    2021年12月15日 10:14 ·  阅读 30 摘要: 工作中我们时常需要解析用不同语言编写的数据.Python 提供了许多库来解析或拆分用其他语言编写的数据.在这篇 Python XML 解析 ...

  2. python列表解析的新方法

    python 列表解析我感觉是python非常灵活的一个地方,一开始接触它的时候,特别是之前学过其它的语言, 你会感觉很不习惯,怎么看怎么不对劲,老是觉的哪个地方怪怪的,这就是列表解析的魔力所在. p ...

  3. 如何在Python中解析YAML文件

    如何在Python中解析YAML文件? #1楼 不依赖C标头的最简单,最纯净的方法是PyYaml( 文档 ): #!/usr/bin/env pythonimport yamlwith open(&q ...

  4. python dpkt解析ssl流

    用法:python extract_tls_flow.py -vr  white_pcap/11/2018-01-10_13-05-09_2.pcap  -o pcap_ssl_flow.txt  & ...

  5. 用Python提取解析pdf文档中内容

    用Python提取解析pdf文档中内容 文章目录: 参考: 1.https://blog.csdn.net/tmaczt/article/details/82876018 # Tika库 2.http ...

  6. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  7. 密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  8. python简介pdf_PDFMiner首页、文档和下载 - Python PDF 解析器 - OSCHINA - 中文开源技术交流社区...

    PDFMiner 是一个 Python 的 PDF 解析器,可以从 PDF 文档中提取信息.与其他 PDF 相关的工具不同,它侧重的是获取和分析文本数据.PDFMiner 允许获取某一页中文本的准确位 ...

  9. [Python]ConfigParser解析配置文件

    近期发现非常多接口配置都硬编码在souce file中了,于是就看了下python怎么解析配置文件,重构下这一块. 这个应该是早就要作的... 配置文件: [mysqld] user = mysql ...

  10. python自动解析json_Python语言解析JSON详解

    本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...

最新文章

  1. com.rr.domain.Department_$$_javassist_5 cannot be cast to javassist.util.proxy.Proxy
  2. 分组背包基础--1712 ACboy needs your help
  3. [云炬创业基础笔记]第六章商业模式测试11
  4. C# 关于密码加密 (转载)
  5. MySQL - Found option without preceding group in config file
  6. 从初创型到独角兽企业,监控架构演进的那些事儿
  7. 【论文】Awesome Relation Extraction Paper(关系抽取)(PART IV)
  8. jsp查询不到mysql内容_java查询到mysql数据库的数据,jspbean查询不到
  9. Mars说光场(5)— 光场在三维人脸建模中的应用
  10. VMware安装Windows XP虚拟机并手动安装外加驱动程序
  11. Python基本数据类型字符串操作总结
  12. java.lang.ClassNotFoundException解决办法
  13. 高德运维基于阿里云的最佳实践
  14. 纯音乐自制吉他及钢琴简谱合集
  15. python用泰勒级数计算圆周率_Python中利用进度条求圆周率
  16. 怎么用 UDP 实现 TCP?
  17. html上传文件的实例
  18. word手敲公式 快速入门Unicode
  19. 11-字符串的格式化
  20. 【转载】武汉高收入高福利公司排行榜

热门文章

  1. linux永久关闭防火墙firewalld和selinux
  2. 51nod 1264 线段相交
  3. 对 ViewGroup 生命周期执行顺序的理解
  4. CY7C68013A工作在SlaveFIFO下的固件代码分析
  5. 腾讯WEB前端开发笔试题
  6. CIKM 2020 Graph Prototypical Networks for Few-shot Learning on Attributed Networks 小样本图学习
  7. 机器学习中的数学——AdaGrad
  8. svm+hog图片分类 java版
  9. oracle 动态添加字段名,ORACLE里头动态的添加字段,如果存在就不添加,如果不存在就添加。sql语句怎么写?...
  10. 使用java打印菱形(实心)