python的文件夹内递归搜索文件内容

linux有grep命令很好用,windows没有找到命令行的这种工具,自己用python写了一个,就可以跨平台运行了:

# coding=utf-8
import os
import chardet
import fileinput
import time

'''
在指定目录中递归搜索关键词
'''

def get_file_encoding(file_path):
    with open(file_path, 'rb') as file:
        result = chardet.detect(file.read())
        encoding = result['encoding']
        return encoding
    
def search_file_content(directory, pattern, extensions=['.php', '.html','.js'],exclude=['exclude','excludepath']):
    """
    在指定目录中递归搜索包含特定模式的文件内容。
    
    参数:
    directory -- 要搜索的目录路径
    pattern -- 要搜索的文本模式
    extensions -- 要搜索的文件扩展名列表,默认为 ['.txt', '.py']
    exclude -- 要排除的文件路径关键字列表,排除掉可加快处理速度

    """
    results = []
    coun=0
    filesnum=0
    for root, dirs, files in os.walk(directory):
        for file in files:
            if os.path.splitext(file)[1] in extensions:
                file_path = os.path.join(root, file)
                isexc=0
                for exc in exclude:
                    if exc in file_path:
                        isexc=1
                if isexc==1:
                    continue
                code=get_file_encoding(file_path)
                filesnum=filesnum+1
                
                try:
                    for line in fileinput.input(file_path,encoding=code):
                        if pattern in line:
                            coun=coun+1
                            print('--------------------------------------------------------------------')
                            print(file_path+':')
                            print(line.strip())
                except:
                    print(file_path+' '+' error')
                fileinput.close()
    print('共搜索'+str(filesnum)+'个文件,找到'+str(coun)+'处')
    return results
 
# 使用示例
# 假设我们要搜索目录 'D:\\phpstudy_pro\\WWW\\erp' 下所有包含文本 'function abc' 的 .php和 .js 文件,并排除mobile和job目录
search_results = search_file_content('D:\\phpstudy_pro\\WWW\\erp', 'function abc',['.php', '.js'],['mobile','job'])
print(search_results)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值