利用python re提取文件中的块内容(多行)
来源:互联网 发布:python元年 编辑:程序博客网 时间:2024/06/10 20:15
应用场景:
有一个建表sql文件create_table.sql如下:
CREATE TABLE TABLE_1( F_KEY CHAR(8) NOT NULL ENABLE, CONSTRAINT P_TRA_BASE_PRICE PRIMARY KEY (F_KEY));CREATE TABLE TABLE_2( F_SEQ_NO NUMBER(10) NOT NULL ENABLE, F_TITLE CHAR(40), F_CONTENT CHAR(1024), F_CREATE_TIMESTAMP TIMESTAMP, F_UPDATE_TIMESTAMP TIMESTAMP, CONSTRAINT P_TRA_BULLETIN_BOARD PRIMARY KEY ( F_SEQ_NO));
……
我想要把各个TABLE的表结构分开,然后再根据表名插入到一个dictionary里面,后续在使用时就能迅速根据表名到这个dictionary找到表结构
可以发现
(
……
……
);
这两个配对的顶格括弧形成的块,就是一张表的表结构内容
那么如何根据那两个括弧来提取这些多行的“块”状内容?
pattern=re.compile(r'^CREATE TABLE.*?^\);$', re.MULTILINE|re.DOTALL)
其中使用re.MULTILINE来进行多行匹配
用re.DOTALL使.能够匹配换行符
用.*?做非贪婪匹配(否则所有的会被匹配成一条,打不到分隔的效果)
完整代码如下:
#!/usr/bin/python import redef split_name_and_field(tb_struct): lines=tb_struct.split('\n') tb_nm_line=lines[0]#可以用命名组匹配表名 tb_nm_pattern=re.compile(r'CREATE\s+TABLE\s+(?P<tb_nm>T_\w+\b)') tb_nm=tb_nm_pattern.search(tb_nm_line).group('tb_nm') tb_st=lines[2:-1] return tb_nm, tb_stfp=open('create_table.sql', 'r')fc=fp.read();table_block_pattern=re.compile(r'^CREATE TABLE.*?^\);$', re.MULTILINE|re.DOTALL)result=table_block_pattern.findall(fc)#可以用前向界定匹配表名#tb_nm_pattern2=re.compile(r'(?<=CREATE TABLE )\w+')#table_name_list=tb_nm_pattern2.findall(fc)if __name__=="__main__": table_struct={} for t in result: (tb_nm, tb_st)=split_name_and_field(t) table_struct[tb_nm]=tb_st for (k,v) in table_struct.items(): print k, v
阅读全文
0 0
- 利用python re提取文件中的块内容(多行)
- Python利用nltk的clean_html提取htm文件的内容
- python提取文件中的关键词及部分上下文内容
- 利用正则表达式提取()内内容
- 利用python 提取log 文件中的关键句子,并进行统计分析
- Python中的re模块(一)
- Python中的re模块(二)
- Python中的re(正则表达式)
- python中的re(正则表达式)
- python中的re模块(正则表达式)
- python中的正则表达式(re模块)
- python中的正则表达式(re模块)
- 利用PDFBox提取pdf文件文本内容的分析
- 利用POI提取Word(.docx)文件的批注内容
- python 文件游标以及 re 中的 match,sub(具体示例)
- Python libtorrent提取种子文件中的信息
- python中的文件内容操作
- Python:正则表达式(三)-re模块的内容
- 基于Web的资产库
- vue中的数组监测
- sql的解析过程
- python的垃圾回收
- 洛谷 P1736 创意吃鱼法
- 利用python re提取文件中的块内容(多行)
- [容斥][dp][卡特兰数]登山
- Android数据库表格创建报错
- 向指定 URL 发送POST方法的请求(状态码200和其他有区别)
- 返回数组指针
- css3选择器
- 机器学习思维导图
- cs231n
- java操作elasticsearch使用QueryBuilders进行数据查询