记一个python
原始sql建表文件.sql,经过用notepad++标记 +正则处理后文件test.txt为以下格式

#
CREATE TABLE `sajt_auth`
  `ID`
  `ROLE_ID`
  `PAGE_ID`
  `BUTTON_ID`
#
CREATE TABLE `sajt_auth_dc`
  `ID`
  `ROLE_ID`
  `PAGE_ID`
  `BUTTON_ID`
#
CREATE TABLE `sajt_button`
  `ID`
  `PAGE_ID`
  `NAME`
  `DEFS`
  `ONCLICK`
  `ACTION`
  `NEW_PAGE_ID`
  `SQL`
  `COMMENTS`
  `ORDER_NUM`
  `TYPE`
#

需要从所有建表语句中划分出所需全量、增量等表
已通过excel筛选出对应表集合,从test.txt文件将其区分分开保存。
思路为获取对应种类表的每个表名在源文件的位置,保存在一个list中,然后再通过list获取源文件内容并追加道新文件。

import re

# 全量表
list1 = ["sajt_jspztxx",
         "sajt_user_timetask"
         ]

# 拉链表
list2 = ['sajt_user',
         'tbl_dsptxx',
         'tbl_ec_document_11',
         'tbl_ec_document_12'
         ]

# 增量表
list3 = ['tbl_ec_alipay']

########################################
# 划分全量表、拉链表、增量表 结果存入txt文件 test.txt文件为原始文件
# filename 想要输出的文件名
# lists 各种表所在行列表
########################################

def split_tables(filename, lists):
    file_path = 'C:\\Users\\LZX\\Desktop\\' + filename
    f = open(file_path, 'a', encoding='UTF-8')
    for i in lists:
        file_obj1 = open('C:\\Users\\LZX\\Desktop\\test.txt', 'r', encoding='UTF-8')
        for line in file_obj1.readlines()[i - 1:]:

            if re.match("#", line):
                f.write('\n')
                break
            else:
                f.write(line)
        file_obj1.close()
    f.close()


########################################
# 根据表明获取在文件中的位置
# lists 对应全局list所包含表明 遍历出在文件中的每一行
########################################
def split_lists(lists):
    filepath = 'C:\\Users\\LZX\\Desktop\\test.txt'
    file_obj = open(filepath, 'r', encoding='UTF-8')
    list_result = []
    count = 0
    for context in file_obj:
        count += 1
        for str1 in lists:
            rex = ".*" + str1 + ""
            result = re.match(rex, context)
            if result:
                list_result.append(count)
    file_obj.close()
    return list_result


########################################
# list1 list2 list3 全局变量
########################################
if __name__ == '__main__':
    list_ql = []
    list_zl = []
    list_ll = []

    list_ql = split_lists(list1)
    list_ll = split_lists(list2)
    list_zl = split_lists(list3)

    split_tables("table_ql", list_ql)
    split_tables("table_ll", list_ll)
    split_tables("table_zl", list_zl)

输出结果:
在这里插入图片描述

CREATE TABLE `sajt_user`
  `ID`
  `LOGIN_ID`
  `LOGIN_PWD`
  `NICKNAME`
  `CREATE_DATE`
  `PWD_UPDATE_DATE`
  `LAST_LOGIN_DATE`
  `EMAIL`
  `TEL`
  `ROLE_ID`
  `SS_NSZT`
  `SKY`
  `FHR`
  `MASTER`
  `JTBM`
  `QYBM`
  `NSRSBH`
  `KPDBM`
  `SSZZ`
  `JSSF`

CREATE TABLE `sajt_user_timetask`
  `ID`
  `LOGIN_ID`
  `LOGIN_PWD`
  `NICKNAME`
  `CREATE_DATE`

CREATE TABLE `tbl_dsptxx`
  `ID`
  `DSPTBM`
  `ZC_DATE`
  `STATE`
  `CA_FILE`
  `CA_FILE_PFX`
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐