python - Python 中的 Unix 文件名通配符?

标签 python unix pattern-matching wildcard

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 中不起作用。使用 fnmatchglob模块来解释通配符。 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/

相关文章:

python - 在 Visual Studio Code 容器中安装 Python 库

python - NetworkX:中心有一个节点的圆形图

linux - 检查用户输入的格式是否正确

shell - shell脚本中变量的第一个字符为大写?

javascript - 用javascript中的下划线字符替换所有出现的点字符

python - 如何将plotly Express绘图保存到html或静态图像文件中?

python - 为什么我在索引字节时会得到一个 int?

python - Paramiko 未正确返回 grep

postgresql - 具有相同通配符的模式匹配

Javascript:操作列表的列表