Python中的fnmatch模块:文件名匹配模式
fnmatch模块是Python标准库中的一个模块,用于文件名的匹配模式。它提供了简单的通配符功能,可以用于筛选文件名或路径。
使用fnmatch模块前需要先导入该模块:
import fnmatch
fnmatch模块中最常用的函数是fnmatch()和filter()函数。
1. fnmatch(pattern, string)
该函数用于检查一个字符串是否匹配指定的通配符模式。其中pattern参数是需要匹配的通配符模式,string参数是需要被匹配的字符串。
使用示例:
import fnmatch
pattern = "*.txt"
filename = "file.txt"
if fnmatch.fnmatch(filename, pattern):
print("匹配成功!")
else:
print("匹配失败!")
以上代码中,pattern是一个通配符模式,使用通配符 * 表示任意字符,使用通配符 .txt 表示匹配以 .txt 结尾的文件名。filename是需要被匹配的字符串,如果filename符合pattern的格式,则匹配成功。
2. filter(names, pattern)
该函数用于根据通配符模式来筛选一个字符串列表中的元素。其中names参数是一个字符串列表,pattern参数是需要匹配的通配符模式。
使用示例:
import fnmatch pattern = "*.txt" files = ["file1.txt", "file2.csv", "file3.txt", "file4.jpg"] filtered_files = fnmatch.filter(files, pattern) print(filtered_files)
以上代码中,pattern是一个通配符模式,使用通配符 * 表示任意字符,使用通配符 .txt 表示匹配以 .txt 结尾的文件名。files是一个包含多个文件名的字符串列表,filter()函数将返回符合pattern格式的文件名列表。
fnmatch模块还提供了一些其他的函数:
- fnmatchcase(pattern, string)
该函数与fnmatch()函数类似,但是在比较字符串时要区分大小写。
- translate(pattern)
该函数用于将通配符模式转换为正则表达式模式。通配符转换为正则表达式的规则如下:
- ? 匹配任意单个字符
- * 匹配0或多个任意字符
- [abc] 匹配字符a、b或c中的任意一个
- [a-z] 匹配a到z中的任意一个字符
- [!abc] 匹配除了字符a、b或c之外的其他任意一个字符
使用示例:
import fnmatch pattern = "*.txt" converted_pattern = fnmatch.translate(pattern) print(converted_pattern)
以上代码中,pattern是一个通配符模式,使用通配符 * 表示任意字符,使用通配符 .txt 表示匹配以 .txt 结尾的文件名。通过translate()函数将通配符模式转换为正则表达式模式。
总结:
fnmatch模块提供了简单的通配符匹配功能,可以用于文件名的筛选和匹配。可以使用fnmatch()函数检查字符串是否匹配通配符模式,使用filter()函数筛选一个字符串列表中符合通配符模式格式的元素。同时,也可以使用fnmatchcase()和translate()等函数进行更灵活的操作。
