Unix 文件名通配符 如何在 Python 中工作?
给定的目录只包含子目录,在每个子目录中(除其他外)有一个文件,其名称以已知字符串结尾,例如 _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
解释通配符并让您根据它们匹配字符串,glob
在内部使用 fnmatch
以及 os.listdir()
为您提供匹配文件名的列表。
在这种情况下,我会使用 fnmatch.filter()
:
import os
import fnmatch
for dirpath, dirnames, files in os.walk(directory):
for filename in fnmatch.filter(files, '*_ext'):
fileNameToPickle = os.path.join(dirpath, filename)
fileToPickle = pickle.load(open(fileNameToPickle, "rb"))
如果您的结构只包含一个 级别的子目录,您也可以使用glob()
模式来表示;表达式路径中的*/
被展开以匹配所有子目录:
import glob
import os
for filename in glob.glob(os.path.join(directory, '*/*_ext')):
# loops over matching filenames in all subdirectories of `directory`.
关于python - Python 中的 Unix 文件名通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15949694/