Python

作者: LeonTung | 来源:发表于2020-09-04 18:28 被阅读0次
  • General
  • 源表解析
  • 文件读写

General

#获取昨天日期 20200922
from datetime import date, timedelta
dt = (date.today() + timedelta(days=-1)).strftime("%Y%m%d") 

# 获取运行时间
import time
print("reading data... " + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

源表解析

# coding=utf-8
import re
import os

# 获取src.txt的sql源表写入new.txt, 输出new中不在old.txt的表, 同时输出old但不在new的表
with open('d:/desktop/test/src.txt', 'r', encoding='utf-8') as fr1:
    str = fr1.read()
    str = re.sub(r'(--).*', '', str)  # 清空注释
    regexp = r'((?i)(from)|(join))\s+(([a-zA-Z0-9\_]+)\.\s*([a-zA-Z0-9\_]+))'
    result = re.findall(regexp, str)
    table_set = set()
    for m in result:
        table_set.add(m[3].lower())
    constr = '\n'
    str1 = constr.join(table_set)  # 用换行符拼接得到的源表集合

    # 将源表写到new文件
    with open('d:/desktop/test/new.txt', 'w+', encoding='utf-8') as fw1:
        fw1.write(str1)

    # 判断new SQL是否有新增源表 & 判断new sql是不是有删除源表
    with open('d:/desktop/test/old.txt', 'r', encoding='utf-8') as fr2:
        str_old = fr2.read()
        # 判断是否新增
        print('# new not in old: ')
        for t in table_set:
            if t not in str_old:
                print(t)

        # 判断是否删除
        str_old = re.sub(r'(--).*', '', str_old)
        regexp1 = r'((?i)(from)|(join))\s+(([a-zA-Z0-9\_]+)\.\s*([a-zA-Z0-9\_]+))'
        result1 = re.findall(regexp1, str_old)
        table_set1 = set()
        for n in result1:
            table_set1.add(n[3].lower())  # 获得old源表
        with open('d:/desktop/test/new.txt', 'r', encoding='utf-8') as fr3:
            str2 = fr3.read()
            print('\n# old not in new: ')
            for t in table_set1:
                if t not in str2:
                    print(t)
print('bingo')


findall  返回列表  https://blog.csdn.net/Cashey1991/article/details/8875213
- 不带括号: 列表元素为字符串,字符串为匹配整个表达式(非整个表达式)
- 一个括号: 列表元素为字符串,字符串为匹配括号表达式(非整个表达式)
- 多个括号: 列表元素为tuple, tuple元素个数与括号数对应(包括匹配结果顺序)

文件读写

  • 官方文档
  • w+: 读写,先清文件内容,文件不存在会创建
  • a+: 追加读写,文件不存在会创建
  • r+: 读写,文件不存在报错
  • a: 追加写,文件不存在会创建
with open('d:/desktop/test/result.txt', 'r', encoding='utf-8') as fr:  # errors='ignore'
    for line in fr.readlines():  # 一次性读取, 按行存放到list
        print(line.strip())   # line会带\n

str = fr.read()  # 一次性读取, 不能用于循环读取


相关文章

网友评论

      本文标题:Python

      本文链接:https://www.haomeiwen.com/subject/blktektx.html