fnmatch如何准确地实现seq模式中的match-any字符

2024-05-23 17:58:48 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个os.walk代码

search = self.search.get_text()
top = '/home/bludiescript/tv-shows'
for dirpath, dirnames, filenames in os.walk(top):
  for filename in filenames:
    if fnmatch.fnmatch(filename, search)
      print os.path.join([dirpath, filename])

在python文档中,它显示您可以用[seq]模式匹配任意一个字符序列,但无论我如何实现它,它都会给出这样的错误或根本没有结果。

那么正确的实现方法是什么来匹配搜索中的汽车序列,以便打印出一个或多个匹配的文件

我尝试过的实现

if fnmatch.fnmatch(filename, [search]) error i got was typeerror unhasable type : 'list'
if fnmatch.fnmatch[filename, search] error i got was typeerror fnmatch function is not subscriptable
if fnmatch.fnmatch([filename, search]) error typeerror fnmatch takes two arguments  1 given
if fnmatch.fnmatch([filename], search) error typeerror expected string or buffer
if fnmatch.fnmatch([search], filename) error typeerror expected string or buffer 
if fnmatch.fnmatch(filename, search, [seq]) error nameerror global name seq not defined

if fnmatch.fnmatch(filename, '[search]')

没有错误,但没有产生任何结果

搜索值

你好,mkv,梅里1,2,3,4,5,6,7等。。。


Tags: inforsearchifostop序列error
1条回答
网友
1楼 · 发布于 2024-05-23 17:58:48

fnmatch实现Unix shell通配符语法。因此,无论您在ls命令中键入什么(例如),都将起作用:

>>> fnmatch.fnmatch("qxx", "[a-z]xx")
True
>>> fnmatch.fnmatch("abc", "a??")
True
>>> fnmatch.fnmatch("abcdef", "a*f")
True
>>> fnmatch.fnmatch("abcdef", "a*[f-k]")
True

记住,fnmatch纯粹是一个字符串匹配操作。如果您发现使用不同的模式样式(例如regex)更方便,那么只需使用regex操作来匹配您的文件名。

相关问题 更多 >