赞
踩
很多情况下我们都需要进行文件搜索。比如找一个很早之前的文件,或者想删除重复的文件等。前者只需要更具名称来查找文件,而后者的话还需要查找文件的内容。今天我们就来实现文件搜索的操作。
在搜索文件之前,我们有一个关键操作,就是遍历文件夹,这部分代码如下:
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)
其中path就是我们遍历到的文件绝对路径。有了这个我们就可以开始搜索文件了。
在Python中内置了一个fnmatch模块,我们可以使用这个模块来匹配目录,具体使用如下:
from fnmatch import fnmatch
# 匹配目录
match = fnmatch("test.jpg", "test.jpg")
print(match)
我们调用了fnmatch函数,传入了要匹配的内容以及匹配规则。这里我们直接匹配两个字符串,删除结果如下:
True
它会返回一个bool值。但是这个和直接if判断不是一样的吗,这个fnmatch模块有什么特殊功能吗。答案是有的,除了直接匹配,fnmatch还支持通配符的操作,比如下面的代码:
from fnmatch import fnmatch
match = fnmatch("test.jpg", "*.jpg")
print(match)
这里我们用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)
上面就是搜索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)
这里我们就是修改了匹配规则。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。