为什么 glob(f'*[jp][pn]g') 有效,而 glob('*p[ng][df]') 无效? (带 [] 的 glob 语法)

问题描述 投票:0回答:1
from glob import glob
thisdir = os.path.abspath('./')
somefiles = glob(f'{samples_dir}/*p[ng][df]') 

返回空列表。

但是这个返回我所有的 png 和 jpg 文件。该文件夹包含 png、jpg 和 pdf 文件。

otherfiles = glob(f'{samples_dir}/*[jp][pn]g')

我只是好奇为什么第一个不起作用。显然我不完全理解 python3 的

[]
方法的
glob
语法。

python python-3.x glob
1个回答
0
投票

A

[...]
表达式匹配大括号之间包含的任何单个字符。所以:

  • [jp][pn]g
    将匹配“foo.jpg”、“foo.jng”、“foo.ppg”和“foo.png”。
  • p[ng][df]
    将匹配“foo.pnd”、“foo.pnf”、“foo.pgd”和“foo.pgf”

第二个表达式的大部分结果似乎没有那么有用。

对于你正在做的事情,我可能会写这样的内容:

somefiles = (
  glob(f'{samples_dir}/*.png') +
  glob(f'{samples_dir}/*.jpg') +
  glob(f'{samples_dir}/*.pdf')
)
© www.soinside.com 2019 - 2024. All rights reserved.