Python基于文件内容实现查找文件功能

 更新时间:2022年05月07日 09:38:23   作者:渴望力量的哈士奇  
无论是Linux系统还是Windows系统都有基于文件名实现过滤、查找的功能。但是如果想要查找一些关于某些文件指定内容的文件,好像它们明面上没有这样的功能了。这个时候就可以通过 Python 来实现这样的功能,快跟随小编一起学习一下吧

该章节将学习关于文件查找的操作,大家都知道,无论是 Linux 系统还是 Windows 系统都有基于文件名实现过滤、查找的功能。但是如果想要查找一些关于某些文件指定内容的文件,好像无论是 Linux 还是 Windows 明面上没有这样的功能了。这个时候就可以通过 Python 来实现这样的功能,通过该章节的学习,就可以学习到该功能的如何利用 Python 实现这样的操作。

文件查找操作

glob 的介绍

glob 包是一个快速查找文件夹中内容的包,可以通过模糊查找的形式找到我们想要的内容。

glob 的基本使用

导入包与模块

from glob import glob

使用方法

glob(任意目录)

返回内容:

指定路径下的内容列表,不存在的路径返回空列表。

代码示例如下:

# coding:utf-8

import os
from glob import glob

target = os.getcwd()

result = glob(target)
print(result)                   # 打印输出当前路径的文件夹

result = glob(target + '/*')
print(result)                   # 打印输出当前路径的文件夹下的所有文件

result = glob(target + '/*.py')
print(result)                   # 打印输出当前路径的文件夹下的所有以 "py" 结尾的文件

result = glob(target + '/*.zip')
print(result)                   # 打印输出当前路径的文件夹下的所有以 "zip" 结尾的文件

result = glob(target + '/filetest*')
print(result)                   # # 打印输出当前路径的文件夹下的所有以 "filetest" 开头的文件

运行结果如下:

查找指定的文件

已知条件:

想查找的文件名已经知道,但是目录在哪里并不知道。

实现方法:

利用 "glob" 从最上级目录开始查找,利用递归模式,不断的查找,直到找到为止。

代码示例如下:

# coding:utf-8

import glob

"""
获取当前路径下所有内容
判断每个内容的类型(文件夹还是文件)
若是文件夹则继续递归查找
"""

path = glob.os.path.join(glob.os.getcwd(), '*')     # 获取当前文件夹下的所有内容
                                                    # glob 模块其实已经包含了 "os" 模块
final_result = []       # 定义一个空列表,用以存储 search() 函数查到的内容

def search(path, target):       # 定义 search() 函数,传入 "path" 文件路径, "target" 要查找的目标文件
    result = glob.glob(path)

    for data in result:         # for 循环判断递归查到的内容是文件夹还是文件
        if glob.os.path.isdir(data):    # 若是文件夹,继续将该文件夹的路径传给 search() 函数继续递归查找
            _path = glob.os.path.join(data, '*')
            search(_path, target)
        else:                           # 若是文件,则将该查询到的文件所在路径插入 final_result 空列表
            if target in data:
                final_result.append(data)
    return final_result


if __name__ == '__main__':
    result = search(path, target='filetest.py')
    print(result)

运行结果如下:

基于文件内容查找文件

接下来我们看一下查找指定内容的文件:

已知条件:

文件中包含有某些关键字,但是不知道文件名和文件所在路径

实现方法:

利用 "glob" 从最上级目录开始查找,利用递归模式,不断的查找。如果是文件夹则进入继续查找,是文件则读取,判断是否包含该内容,返回该内容的文件名以及所在路径。

其实,基于文件内容查找文件实现的方式大体与上文的查找指定文件大体相似,只不过加入了读取文件的判断罢了。

代码示例如下:

# coding:utf-8

import glob

"""
获取当前路径下所有内容
判断每个内容的类型(文件夹还是文件)
若是文件夹则继续递归查找
"""

path = glob.os.path.join(glob.os.getcwd(), '*test04')     # 因为下文捕获不可读文件格式太多,所以这里直接指定了 "test04" 路径
final_result = []       # 定义一个空列表,用以存储 search() 函数查到的内容



def search(path, target):       # 定义 search() 函数,传入 "path" 文件路径, "target" 要查找的目标文件
    result = glob.glob(path)

    for data in result:         # for 循环判断递归查到的内容是文件夹还是文件
        if glob.os.path.isdir(data):    # 若是文件夹,继续将该文件夹的路径传给 search() 函数继续递归查找
            _path = glob.os.path.join(data, '*')
            search(_path, target)
        else:                           # 若是文件,则将该查询到的文件所在路径插入 final_result 空列表
            f = open(data, 'r')         # 利用 open() 函数读取文件,并通过 try...except... 捕获不可读的文件格式(.zip 格式)
            try:
                content = f.read()
                if target in content:
                    final_result.append(data)
            except:
                print('这是不可读文件格式的文件的所在路径:{} '.format(data))
                continue
            finally:
                f.close()
    return final_result


if __name__ == '__main__':
    result = search(path, target='测试文件')
    print(result)

运行结果如下:

到此这篇关于Python基于文件内容实现查找文件功能的文章就介绍到这了,更多相关Python文件查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决pycharm最左侧Tool Buttons显示不全的问题

    解决pycharm最左侧Tool Buttons显示不全的问题

    今天小编就为大家分享一篇解决pycharm最左侧Tool Buttons显示不全的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python爬虫爬取博客实现可视化过程解析

    Python爬虫爬取博客实现可视化过程解析

    这篇文章主要介绍了Python爬虫爬取博客实现可视化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python基础 range的用法解析

    python基础 range的用法解析

    这篇文章主要介绍了python基础 range的用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python实现矩阵转置的方法分析

    Python实现矩阵转置的方法分析

    这篇文章主要介绍了Python实现矩阵转置的方法,结合实例形式较为详细的分析了Python实现矩阵转置的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Django 实现图片上传和下载功能

    Django 实现图片上传和下载功能

    这篇文章主要介绍了Django 如何实现图片上传和下载功能,帮助大家更好的理解和使用django框架,感兴趣的朋友可以了解下
    2020-12-12
  • Python实战小游戏飞机大战详解

    Python实战小游戏飞机大战详解

    飞机大战想必是很多人童年时期的经典游戏,我们依旧能记得抱个老人机娱乐的场景,下面这篇文章主要给大家介绍了关于如何利用python写一个简单的飞机大战小游戏的相关资料,需要的朋友可以参考下
    2021-11-11
  • Python中celery的使用

    Python中celery的使用

    Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。接下来通过本文给大家介绍Python中celery的使用详解,感兴趣的朋友一起看看吧
    2021-08-08
  • Anaconda 离线安装 python 包的操作方法

    Anaconda 离线安装 python 包的操作方法

    今天小编就为大家分享一篇Anaconda 离线安装 python 包的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python数学建模之Numpy 应用介绍与Pandas学习

    python数学建模之Numpy 应用介绍与Pandas学习

    这篇文章主要介绍了python数学建模之Numpy 应用介绍与Pandas学习,NumPy 是一个运行速度非常快的数学库,一个开源的的python科学计算库,主要用于数组、矩阵计算
    2022-07-07
  • Python并发编程队列与多线程最快发送http请求方式

    Python并发编程队列与多线程最快发送http请求方式

    假如有一个文件,里面有10万个url,需要对每个url发送http请求,并打印请求结果的状态码,如何编写代码尽可能快的完成这些任务呢
    2021-09-09

最新评论