zoukankan      html  css  js  c++  java
  • 快速寻找文件(Python)

    快速寻找文件

    根据文件名字匹配, 根据文件内容匹配

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import os
    import re
    
    
    class QuickSearchFile:
        ''' 快速寻找文件 '''
    
        def file_name_search(self, file_dir_path, keyword):
            ''' 文件名字匹配 '''
            search_result_array = []
            for root, dirs, files in os.walk(file_dir_path):
                # root 表示当前正在访问的文件夹路径
                # dirs 表示该文件夹下的子目录名list
                # files 表示该文件夹下的文件list
    
                # 针对当前目录
                for file_name in files:
                    if re.search(keyword, file_name):
                        search_result = os.path.join(root, file_name).replace('\', '/')
                        search_result_array.append(search_result)
    
            return search_result_array
    
        def file_content_search(self, file_dir_path, keyword):
            ''' 文件内容匹配 '''
            search_result_array = []
            for root, dirs, files in os.walk(file_dir_path):
                for file_name in files:
                    file_path = os.path.join(root, file_name)
                    print('----- 正在检索{} -----'.format(file_path))
                    try:
                        with open(file_path, 'rb') as f:
                            content = f.read().decode("utf8", 'ignore')  # utf-8, gbk
                            f.close()
    
                        # 匹配
                        if re.search(keyword, content):
                            search_result_array.append(file_path.replace('\', '/'))
                    except Exception as e:
                        print('---- file_path: {} 不是可打开的文件 -----'.format(file_path))
    
            return search_result_array
    
    
    if __name__ == '__main__':
        obj = QuickSearchFile()
        search_file_type = input('1: file_content(文件内容匹配), 2: file_name(文件名称匹配) 请输入搜索文件类型[1-2]: ')
        while True:
            if str(search_file_type) in ['1', '2']:
                file_dir_path = input('请输入搜索文件所在的目录: ')
                if not file_dir_path: file_dir_path = '/data/strategy/redis2mysql4decompression' # 测试
                keyword = input('请输入需要搜索的内容: ')
                if str(search_file_type) == '1':
                    search_result_array = obj.file_content_search(file_dir_path, keyword)
                    print('返回结果: 关键字keyword: {}, 所在的所有文件列表: {}'.format(keyword, search_result_array))
                elif str(search_file_type) == '2':
                    search_result_array = obj.file_name_search(file_dir_path, keyword)
                    print('返回结果: 关键字keyword: {}, 所在的所有文件列表: {}'.format(keyword, search_result_array))
            else:
                print('请重新输入, 选择[1-2]')
  • 相关阅读:
    关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
    OPCDAAuto.dll的C#使用方法浅析(转载)
    微软系统工具包Sysinternals Suite官方下载地址
    C#的dll被其他程序调用时,获取此dll正确的物理路径
    根据存储过程,查询此过程的参数和参数数据类型讯息
    sql server中类似oracle中decode功能的函数
    c# HttpWebResponse 调用WebApi
    MariaDB10.4以上版本安装
    Windows server 2012 显示“我的电脑”
    Debian 9 启动后进入命令行
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/14324491.html
Copyright © 2011-2022 走看看