python3 正则表达式匹配文本文件

编写一个程序,打开文件夹中所有的.txt 文件,查找匹配用户提供的正则表达式的所有行。结果应该打印到屏幕上。

还是太年轻了

刚开始看到这个要求,觉得很简单,open()打开文本文件,编辑regex并且匹配文件对应行,并打印在屏幕上

没那么容易

开始写代码:
首先import os,re,感觉还会用到sys。先加上再说。
路径问题就来了:
脑海中默认的文件夹是有子文件夹和文件的。在判断给出路径是文件夹且不为空的时候,后面就卡壳了

import os,re,sys
path=input('please enter a path:')
regex=re.compile(r'.*Mary.*',re.I) #匹配各种形式的mary
if os.path.isdir(path) and os.listdir(path) # 判断文件夹不为空
	for file in os.listdir(path):
		if os.path.splitext(file)[1]=='.txt':
			fp=open(os.path.join(path,file),'r')
			fpline=fp.readlines()
			for line in fpline:
				if regex.search(line):
					print(line)
			fp.close()		
		

这样运行下来发现只有给出路径下的文本文件处理并输出了,然鹅,给出路径下的子文件中的文件没有处理。
求助于万能的度娘,发现原来是for语句中os.listdir(path)用的有问题。 这个只用于:在一个目录下面只有文件,没有文件夹。
文件夹中的子文件没有处理,就很正常了
那么给出路径中有子文件和文件的这种情况,需要用os.walk(),开始改代码。

import os,re,sys
path=input('please enter a path:')
regex=re.compile(r'.*Mary.*',re.I) #匹配各种形式的mary
if os.path.isdir(path) and os.listdir(path) # 判断文件夹不为空
	for root,dirs,files in os.walk(path):
		for file in files:
			if os.path.splitext(file)[1]=='.txt':
				fp=open(os.path.join(root,file),'r')
				fpline=fp.readlines()
				for line in fpline:
					if regex.search(line):
						print(line)
			   fp.close()		

重新运行下,成功了,文件夹和文件都处理了。
因为前面给的路径,只要导出来的文件都是.txt文件。
然后就想把路径包含的范围扩大,比如,直接根目录下,或者是有很多类型的文件和文件夹,结果试运行就出错了,错误提示如图:
在这里插入图片描述
不太清楚是什么原因,先mark下吧,后面再继续研究。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值