python脚本搜索文件内容并打印

自己设定关键字,根据关键字在当前目录和当前目录的子目录下,搜索文件内容,将含有关键字的行打印出来。

因为有一个错误,搞了两个多小时才弄好,这个在代码中有标注。

# coding = utf-8
#2018-12-29 
#在文件夹中搜索关键字
import os

#搜索包含的关键字
keyword = ['big','small']

#搜索不包含的关键字
exclude_word = ['dog']

#设定一组指定的文件名扩展,用list方便添加其他类型文件
file_name_list = ['.v','.txt','.cpp']

#设定一组不搜索的文件名
exclude_file_name_list = []

#定义search函数,便于递归从文件中搜索关键字
def search(search_path):
 #判断文件路径是否存在
	if os.path.exists(search_path):
	#获取search_name目录下的文件/文件夹名,并遍历文件
		for file_name in os.listdir(search_path):
			full_path = os.path.join(search_path,file_name)
			#flag 文件名是否包含file_name_list,不包含exclude_file_name_list
			flag = False
			 #flag_path 第一次打印文件名
			flag_filepath = True
			i = 0
			 #判断是否是文件
			 ################
			 ###	非常重要  ######
			 ########################
			 ####这里一定要用full_path,而不是file_name,否则出错
			if os.path.isfile(full_path):
			   #判断文件名中是否包含指定文件名
				for extend in file_name_list:
					if extend in file_name:
						flag = True
						#判断文件名中是否不包含exclude_file_name_list中的文件名
						for exclude in exclude_file_name_list:
							if exclude in file_name:
								flag = False
				#如果flag为真,逐行检索文件中的内容
				if flag:
					flag = False
					ff = open(full_path,'r')
					#逐行读取文件内容,防止碰到大的文件卡死
					for line in ff:
						i+=1
						#是否打印改行标志位FLAG
						FLAG = False
						if len(exclude_word)==0:
							for KEY in keyword:
								if KEY in line:
								#改行满足要求,打印
									FLAG = True
									break
						else:
							for KEY in keyword:
								if KEY in line:
									FLAG = True
									break									
							for UKEY in exclude_word:
								if UKEY in line:
									FLAG = False
									break
						if FLAG:
							FLAG = False
							#文件路径只输出一次,
							if flag_filepath:
								print("file path: "+full_path)
								flag_filepath = False
							print("line %d" %i)
							print(line)
			#如果是文件夹,递归调用search函数
			################
			 ###	非常重要  ######
			 ########################
			 ####这里一定要用full_path,而不是file_name,否则出错
			if os.path.isdir(full_path):
				search(full_path)
	else:
		print(search_path," not path ")

search_path = os.getcwd()
print(search_path)
search(search_path)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值