快速寻找文件(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]')

 

posted @ 2021-01-25 12:03  风不再来  阅读(587)  评论(0编辑  收藏  举报