利用python re提取文件中的块内容(多行)
2017-10-26 15:40
495 查看
应用场景:
有一个建表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使.能够匹配换行符
用.*?做非贪婪匹配(否则所有的会被匹配成一条,达不到分隔的效果),代码如下:
有一个建表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 re def 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_st fp=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
相关文章推荐
- Python利用nltk的clean_html提取htm文件的内容
- 利用python 提取log 文件里的关键句子,并进行统计分析
- python提取文件中的关键词及部分上下文内容
- 利用Python将Linux conf配置文件的内容解析成字典格式
- Python使用re模块正则提取字符串中括号内的内容示例
- 【Python小工具】Python实现批量解析PDF文件提取内容并写入到Excel中
- Learning Python 013 按行读取文件(逐行读取) --- 按行写入文件(逐行写入) --- 实战:从字幕文件中提取字幕内容
- python 将百度搜索风云榜的关键内容提取并写入txt文件和读取验证
- 利用POI提取Word(.docx)文件的批注内容
- Python---对html文件内容进行搜索取出特定URL地址字符串,保存成列表,并使用每个url下载图片,并保存到硬盘上,使用正则re
- 利用PDFBox提取pdf文件文本内容的分析
- 利用python 提取log 文件中的关键句子,并进行统计分析
- 利用iTextSharp提取PDF文件中的文本内容
- Python学习20:利用函数来打印文件内容
- python处理多行文件内容
- [Python]_[使用正则表达式提取迅雷界面配置文件XLUE的图片]
- python下载文件(图片)源码,包含爬网内容(爬url),可保存cookie
- 利用python 传输文件
- [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容
- Python之sax的ContentHandler类方法处理多行内容的情况