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]')
  • 相关阅读:
    Fragment练习
    view有了父元素就不能再添加父元素
    margin与padding的不同
    BroadcastReceiver组件
    史上最著名的10个思想实验[转]

    godaddy域名空间购买波折
    碎片2
    程序员要多喝水
    google.com的首页换上了pc man游戏
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/14324491.html
Copyright © 2011-2022 走看看