Python 中的 Unix 文件名模式匹配
在这里,我们将了解如何使用 Python 获取 UNIX shell 样式的模式匹配技术。有一个名为 **fnmatch** 的模块用于执行此操作。此模块用于将文件名与模式进行比较,然后根据匹配情况返回 True 或 False。
要使用它,首先我们需要导入 **fnmatch** 标准库模块。
import fnmatch
在 Unix 终端中,有一些通配符用于匹配模式。它们如下所示:
- ‘*’ 星号用于匹配所有内容。
- ‘?’ 问号用于匹配单个字符。
- [seq] 序列用于按顺序匹配字符
- [!seq] 非序列用于匹配序列中不存在的字符。
如果要搜索星号或问号作为字符,则必须像这样使用它们:[ * ] 或 [ ? ]
fnmatch() 方法
fnmatch() 方法接受两个参数,分别是文件名和模式。此函数用于检查文件名是否与给定模式匹配。当操作系统区分大小写时,在匹配之前,参数将被规范化为大写或小写字母。
示例代码
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files') for filename in files: print('File: {}\t: {}'.format(filename, fnmatch.fnmatch(filename, file_pattern)))
输出
$ python3 310.UNIX_filename.py File: test_file5.txt : True File: test_file2.png : True File: test_file1.txt : True File: another_file.txt : False File: TEST_FILE4.txt : False File: abc.txt : False File: test_file3.txt : True $
filter() 方法
filter() 方法也接受两个参数。第一个是名称,第二个是模式。此模式从所有文件名的列表中查找匹配的文件名列表。
示例代码
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files') match_file = fnmatch.filter(files, file_pattern) print('All files:' + str(files)) print('\nMatched files:' + str(match_file))
输出
$ python3 310.UNIX_filename.py All files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'another_file.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt'] Matched files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt'] $
translate() 方法
translate() 方法接受一个参数。参数是一个模式。我们可以使用此函数将 shell 样式模式转换为另一种类型的模式,以便在 Python 中使用正则表达式进行匹配。
示例代码
import fnmatch, re file_pattern = 'test_f*.txt' unix_regex = fnmatch.translate(file_pattern) regex_object = re.compile(unix_regex) print('Regular Expression:' + str(unix_regex)) print('Match Object:' + str(regex_object.match('test_file_abcd123.txt')))
输出
$ python3 310.UNIX_filename.py Regular Expression:(?s:test_f.*\.txt)\Z Match Object:<_sre.SRE_Match object; span=(0, 21), match='test_file_abcd123.txt'> $
广告