有没有办法通过文件名中的变量字符串过滤文件?

2024-09-29 17:20:29 发布

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

我试图用一个共同的模式过滤所有文件。为什么我不能把一个可变模式过滤。你知道吗

listOfFiles = os.listdir('.')
casenr = str(nr)
pattern = "*"+str(nr)+"_*.state"
for entry in listOfFiles:
    if fnmatch.fnmatch(entry, pattern):
        statefile = entry
print(statefile)

我希望找到一个名为

初始化8_abc.txt文件你知道吗


Tags: 文件foros模式nrlistdirpatternstate
3条回答

为什么不直接用glob?按照你的例子你可以做:

import glob

pattern = f'/path/to/directory/with/files/*{str(nr)}_*.state'
files = glob.glob(pattern)

for file in files:
    doSomething(file)

glob允许使用*通配符搜索具有特定模式的文件(您可以在模式的任何部分使用通配符,例如在多个子目录中搜索)。参见documentation。 另外,请注意,只有python>;3.6才支持使用f字符串。你知道吗

这应该管用。但是,您的代码将只打印最后一个匹配项,因为每次找到匹配项时都会用该匹配项覆盖statefile。使statefile成为一个列表并执行statefile.append(entry),您应该得到一个所有匹配项的列表。你知道吗

这对我很有用:

import os, fnmatch
listOfFiles = os.listdir('.')
pattern = "*"+"1"+"*"
statefile = []
for entry in listOfFiles:
    if fnmatch.fnmatch(entry, pattern):
        statefile.append(entry)
print(statefile)

可以使用正则表达式为文件名列表构建一些非常重要的过滤器:

import re

filenames = [
    "_filename_example1",
    "_filename_examples",
    "filename_example2",
    "_filename_example_",
]

regex = re.compile("_.*\d")
selected = filter(regex.match, filenames)
for s in selected:
    print(s)

给定的示例只显示\u filename\u example1,因为它以\ueem>开头,以number结尾。你知道吗

相关问题 更多 >

    热门问题