在python中,如何仅获取目录中与特定命名模式匹配的文件名,而忽略其他文件名?

在python中,如何仅获取目录中与特定命名模式匹配的文件名,而忽略其他文件名?,python,string,directory,path,filenames,Python,String,Directory,Path,Filenames,我有一个满是jpeg文件的目录,这些文件都应该按照相同的格式命名,可能看起来像这样,例如: "ABC_00001_D0.jpg" "ABC_00100_D8.jpg" "ABC_00023_D4.jpg" ... 其中,数字字符可以是任何数字,但每个文件名的字母和下划线应始终相同,且位置相同 我正在将文件名读入一个列表,同时确保只抓取以下jpg类型: 导入操作系统 预期的\u filename\u style=“ABC\u00000\

我有一个满是jpeg文件的目录,这些文件都应该按照相同的格式命名,可能看起来像这样,例如:

"ABC_00001_D0.jpg"
"ABC_00100_D8.jpg"
"ABC_00023_D4.jpg"
...
其中,数字字符可以是任何数字,但每个文件名的字母和下划线应始终相同,且位置相同

我正在将文件名读入一个列表,同时确保只抓取以下jpg类型:

导入操作系统
预期的\u filename\u style=“ABC\u00000\u D0.jpg”
文件夹路径=r“C:\my\u dir”
文件列表=[]
对于os.listdir(文件夹路径)中的f:
如果f.endswith(“.jpg”):
filelist.append(f)
印刷品(f)
但是,有时目录中会出现不符合我的命名约定的恶意文件名。例如,我想忽略一个类似于
EFG\u 00001\u D1.jpg
ABC\u 0E001\u D0.jpg
的文件名


我希望能够更改预期的格式(例如更改为“00_XYZ_00.jpg”)代码现在应该接受新的格式。但是,它总是只允许数字字符变化,所以我想检查每个文件名中的非数字字符是否与
expected\u filename\u style
中正确位置的非数字字符相匹配?有人能帮我解决这个问题吗?

A如评论中所述,下面是一个使用re库的解决方案

import re
expected_file_format = "ABC_00000_D0.jpg"

# as mentioned, this can vary. 
# Also, characters and underscore represent themselves, 
# but 0 represents all digits 0-9

regex = re.compile(expected_file_format.replace("0", "\d") + "$", flags=re.I) 
# dont add the flags if you want case sensitive match

file_name = "ABC_12345_D9.jpg"
print(bool(regex.match(file_name)))  # True

file_name = "ABC_1234_D9.jpg"
print(bool(regex.match(file_name)))  # False

将re库与regex
re.compile一起使用(“ABC_u(\d+)\ud(\d+).jpg”,flags=re.I)
。您的建议没有将我期望的\u filename\u样式变量作为输入。如果我想更改它,如前所述,该怎么办?然后您相应地更改您的regexp。我认为根据输入创建动态regexp并不困难。您能提供一个小的工作示例吗?我对python不熟悉,只是在学习。我将添加一个答案似乎我也不再需要.endswith()了。是的。match用于从字符串的开头开始搜索,而“$”表示匹配到字符串的结尾。因此“ABC_12345_D6.jpge”将导致搜索失败