Python实现文件搜索

举报
新建文件夹 发表于 2021/12/13 22:50:21 2021/12/13
【摘要】 一、前言 很多情况下我们都需要进行文件搜索。比如找一个很早之前的文件,或者想删除重复的文件等。前者只需要更具名称来查找文件,而后者的话还需要查找文件的内容。今天我们就来实现文件搜索的操作。 二、fnm...

一、前言

很多情况下我们都需要进行文件搜索。比如找一个很早之前的文件,或者想删除重复的文件等。前者只需要更具名称来查找文件,而后者的话还需要查找文件的内容。今天我们就来实现文件搜索的操作。

二、fnmatch模块

1、遍历

在搜索文件之前,我们有一个关键操作,就是遍历文件夹,这部分代码如下:

import os 
basedir = r"D:\\" 
for root, dirs, files in os.walk(basedir): 
    for file in files: 
        path = os.path.join(root, file) 
        print(path)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中path就是我们遍历到的文件绝对路径。有了这个我们就可以开始搜索文件了。

2、搜索

在Python中内置了一个fnmatch模块,我们可以使用这个模块来匹配目录,具体使用如下:

from fnmatch import fnmatch
# 匹配目录
match = fnmatch("test.jpg", "test.jpg")
print(match)

  
 
  • 1
  • 2
  • 3
  • 4

我们调用了fnmatch函数,传入了要匹配的内容以及匹配规则。这里我们直接匹配两个字符串,删除结果如下:

True

  
 
  • 1

它会返回一个bool值。但是这个和直接if判断不是一样的吗,这个fnmatch模块有什么特殊功能吗。答案是有的,除了直接匹配,fnmatch还支持通配符的操作,比如下面的代码:

from fnmatch import fnmatch
match = fnmatch("test.jpg", "*.jpg")
print(match)

  
 
  • 1
  • 2
  • 3

这里我们用test.jpg*.jpg来匹配。其中*就表示任意多个字符,也就是匹配.jpg结尾的文件。除了*还有一些其它通配符,具体如下:

通配符 作用
* 匹配所有字符
? 匹配单个字符
[seq] 匹配指定范围内的字符
[!seq] 匹配指定范围外的字符

我们可以根据需求来写匹配规则。除了fnmatch函数,fnmatch中还有一个filter函数,这里就不展开了。

三、文件搜索

我们结合遍历和匹配的操作写出文件搜索的功能,代码如下:

import os
from fnmatch import fnmatch
basedir = r"D:\\"
for root, dirs, files in os.walk(basedir):
    for file in files:
        path = os.path.join(root, file)
        # 匹配D盘下的所有gif图片
        if fnmatch(path, "*.gif"):
            print(path)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面就是搜索D盘下所有GIF图的操作,大家可以根据自己的需求来修改。如果要查找路径中带有test的文件可以修改为如下:

import os
from fnmatch import fnmatch
basedir = r"D:\、"
for root, dirs, files in os.walk(basedir):
    for file in files:
        path = os.path.join(root, file)
        if fnmatch(path, "*test*"):
            print(path)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里我们就是修改了匹配规则。

文章来源: zacksock.blog.csdn.net,作者:ZackSock,版权归原作者所有,如需转载,请联系作者。

原文链接:zacksock.blog.csdn.net/article/details/121904091

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。