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'>
$

更新于: 2020-06-26

1K+ 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告