📅  最后修改于: 2023-12-03 15:00:49.318000             🧑  作者: Mango
Python提供了fnmatch
模块,其中包含了一些用于文件名比较的函数,这些函数可以非常方便地将文件名与模式进行匹配,类似于Unix shell的文件名模式匹配。
fnmatch
模块中最常用的函数是fnmatch()
,它采用两个参数:文件名和模式字符串。
import fnmatch
file_name = 'example.txt'
pattern = '*.txt'
if fnmatch.fnmatch(file_name, pattern):
print('文件名与模式相匹配')
else:
print('文件名与模式不匹配')
上面的代码会输出文件名与模式相匹配
,因为该文件名符合指定的模式。
fnmatch()
还支持在模式字符串中使用特殊字符来匹配不同类型的字符:
*
: 匹配任意数量的任意字符?
: 匹配单个任意字符[seq]
: 匹配任意出现在seq中的字符[!seq]
: 匹配任意未出现在seq中的字符例如:
file_name = 'foo.py'
if fnmatch.fnmatch(file_name, '*.py'):
print('Python文件')
file_name = 'bar.pyd'
if fnmatch.fnmatch(file_name, '*.py?'):
print('Python文件')
file_name = 'README.txt'
if fnmatch.fnmatch(file_name, '[Rr][Ee][Aa][Dd][Mm][Ee].[Tt]*'):
print('README文件')
file_name = 'example.html'
if fnmatch.fnmatch(file_name, '!*.txt'):
print('非文本文件')
除了基本用法外,fnmatch
模块还提供了以下函数:
与fnmatch()
类似,但区分大小写。
使用指定的模式过滤列表中的文件名(或其他字符串)。
import os
import fnmatch
files = os.listdir('.')
for name in fnmatch.filter(files, '*.py'):
print(name)
上面的代码将列出当前目录中所有以.py结尾的文件名。
将模式字符串转换为正则表达式字符串。这在需要进行更复杂的文件名匹配时很有用。
import fnmatch
pattern = 'log-[0-9]*[0-9].txt'
regex = fnmatch.translate(pattern)
print('模式:', pattern)
print('正则表达式:', regex)
上面的代码将打印出匹配以log-开头、后面跟1到99的数字、以.txt结尾的文件名的正则表达式。
fnmatch
模块为Python开发者提供了一种快速、简单的方法来过滤和匹配文件名。它非常类似于Unix shell的文件名模式匹配。除了基本的fnmatch()
函数外,它还提供了其他函数,如fnmatchcase()
、filter()
和translate()
,以实现更复杂的文件名匹配需求。