Python中的Unix文件名通配符?

Python中的Unix文件名通配符?,python,unix,pattern-matching,wildcard,Python,Unix,Pattern Matching,Wildcard,Unix文件名通配符如何在Python中工作 给定的目录只包含子目录,每个子目录中(除其他外)有一个文件,其名称以已知字符串结尾,例如\u ext。文件名的第一部分总是不同的,所以我需要使用这个模式来访问文件 我想这样做: directory = "." listofSubDirs = [x[0] for x in os.walk(directory)] listofSubDirs = listofSubDirs[1:] #removing "." for subDirectory in li

Unix文件名通配符如何在Python中工作

给定的目录只包含子目录,每个子目录中(除其他外)有一个文件,其名称以已知字符串结尾,例如
\u ext
。文件名的第一部分总是不同的,所以我需要使用这个模式来访问文件

我想这样做:

directory = "."
listofSubDirs = [x[0] for x in os.walk(directory)]
listofSubDirs = listofSubDirs[1:] #removing "."

for subDirectory in listofSubDirs:
    fileNameToPickle = subDirectory + "/*_ext" #only one such file exists
    fileToPickle = pickle.load(open(fileNameToPickle, "rb"))
    ... do stuff ...

但没有模式匹配发生。它在Python下是如何工作的?

Shell通配符模式在Python中不起作用。使用或模块来解释通配符
fnmatch
解释通配符并允许您根据通配符匹配字符串,
glob
在内部使用
fnmatch
以及
os.listdir()
为您提供匹配文件名的列表

在本例中,我将使用
fnmatch.filter()

如果您的结构只包含一级子目录,那么您还可以使用表示该目录的
glob()
模式;表达式路径中的
*/
将展开以匹配所有子目录:

import glob
import os

for filename in glob.glob(os.path.join(directory, '*/*_ext')):
    # loops over matching filenames in all subdirectories of `directory`.
glob.glob('*\u ext')
支持通配符。您确实应该使用glob:
import glob
import os

for filename in glob.glob(os.path.join(directory, '*/*_ext')):
    # loops over matching filenames in all subdirectories of `directory`.