第八章 正则表达式查找
编写一个程序,打开文件夹中所有的.txt文件,查找匹配用户提供的正则表达式的所有行。结果应该打印到屏幕上。
#导入模块os,re
import re,os
#建立正则表达式的规则,一个是匹配文件的,一个是匹配文档的
#创建函数,包含(地址、文件表达式、语句表达式)三个参数
def FindTxt(Addr,fileRe,sentRe):
#创建文件、文档正则表达式
fileRegex=re.compile(fileRe)
sentenceRegex=re.compile(sentRe)
#通过os模块查找指定路径中的文件名,返回一个列表
fileLists=os.listdir(Addr)
#创建一个字典,用于储存找到的文件路径及对应的语句
printFiles={}
#创建两个变量,用于储存找到的文件及对应语句数量
fileNum=0
sentNum=0
#找到文件中所有的.txt文件,并逐一打开,并且要打印或者留存,这里可以增加一个计数功能,看有多少txt文件
for fileList in fileLists:
if fileRegex.search(fileList):
fileNum+=1
fileAddr=Addr+fileList
fileobj=open(fileAddr)
sentLists=fileobj.readlines()
sentTemp = 0
#创建一个临时变量sentTemp用于存储匹配到的句子数量,如果没有匹配到句子就以为文件中的文本不符合要求,这个文件应该不作为目标
# 对文档内容各行进行匹配,匹配到的就需要打印出来或者留存,以备打印,可以增加计数功能,看有多少匹配的句子
for sentList in sentLists:
if sentenceRegex.search(sentList):
sentNum+=1
sentTemp+=1
# 将符合条件的文件路径及句子赋值到字典中去,记住要去除'\n',不然不好看
printFiles.setdefault(fileAddr,[]).append(sentList.strip('\n'))
if sentTemp==0:
fileNum-=1
print('在路径为%s的文件夹内,找到了%s个符合要求的文件,总共有%s个符合的句子。\n对应关系如下:' % (Addr, fileNum,sentNum))
#打印字典中的内容对应打印出来
for printFile in printFiles:
print(printFile+':')
for printSen in printFiles[printFile]:
print('\t\t\t\t%s'%printSen)
Address='E:\\pythonProject\\add\\'
fileRe='.txt'
sentRe='hello'
FindTxt(Address,fileRe,sentRe)