Python3.5 递归 glob 不显示匹配文件

Python3.5 recursive glob not showing matching files

Pyton >= 3.5 glob 支持递归搜索。我正在尝试这样做,但没有成功。

在这里你可以看到我的目录结构:

/Volumes/user/TEST/
└── [NAME]john\ doe,\ peter\ griffin\ -\ sample\ video[29.06.17][1080]{user}
    ├── [NAME]john\ doe,\ perter\ griffin\ -\ sample\ video[29.06.17][1080]{user}.mp4
    ├── [NAME]john\ doe,\ peter\ griffin\ -\ sample\ video[29.06.17][Hi-Res]
    │   ├── 583a6ea574035-img-8399.jpg
    │   ├── 583a6eb9681c0-img-8401.jpg
    │   ├── 583a6eb9e53e1-img-8402.jpg
    │   ├── 583a6ecad078d-img-8404.jpg
    │   ├── 583a6ecd207ed-img-8403.jpg
    │   ├── 583a6edb7348c-img-8405.jpg
    │   ├── 583a6ede1cbfa-img-8406.jpg
    │   ├── 583a6eeb294a9-img-8407.jpg
    │   ├── 583a6eee94a45-img-8408.jpg
    │   ├── 583a6efb2389a-img-8409.jpg
    │   ├── 583a6f01a78ae-img-8410.jpg
    │   ├── 583a6f0daea30-img-8411.jpg
    │   ├── 583a6f1301e3c-img-8412.jpg
    │   ├── 583a6f1ec07d8-img-8413.jpg
    │   ├── 583a6f240d4ce-img-8414.jpg
    │   ├── 583a6f306f517-img-8415.jpg
    │   ├── 583a6f36def7a-img-8416.jpg
    │   ├── 583a6f4280706-img-8417.jpg
    │   ├── 583a6f48b8b11-img-8418.jpg
    │   ├── 583a6f55160cc-img-8419.jpg
    │   ├── 583a6f5b7fb35-img-8420.jpg
    │   ├── 583a6f68aad40-img-8423.jpg
    │   ├── 583a6f6da8c0b-img-8424.jpg
    │   ├── 583a6f7b9e1d6-img-8425.jpg
    │   ├── 583a6f8069e59-img-8426.jpg
    │   ├── 583a6f8e9891e-img-8427.jpg
    │   ├── 583a6f9427910-img-8428.jpg
    │   ├── 583a6fa45e3f4-img-8429.jpg
    │   ├── 583a6fa96b182-img-8430.jpg
    │   ├── 583a6fb935bf2-img-8431.jpg
    │   ├── 583a6fca7a0c9-img-8433.jpg
    │   ├── 583a6fcbab549-img-8434.jpg
    │   ├── 583a6fdcf2812-img-8435.jpg
    │   ├── 583a6fde5ee86-img-8436.jpg
    │   ├── 583a6fee54d9b-img-8437.jpg
    │   ├── 583a6ff0acb76-img-8438.jpg
    │   ├── 583a7000ecd80-img-8439.jpg
    │   ├── 583a70026c325-img-8440.jpg
    │   ├── 583a701319c22-img-8441.jpg
    │   ├── 583a701457221-img-8443.jpg
    │   ├── 583a7027e8531-img-8444.jpg
    │   ├── 583a7029f0e7c-img-8445.jpg
    │   ├── 583a703d6c3c9-img-8446.jpg
    │   ├── 583a703f879f5-img-8447.jpg
    │   ├── 583a7051ae77a-img-8448.jpg
    │   ├── 583a705b588c3-img-8449.jpg
    │   ├── 583a706d40811-img-8450.jpg
    │   ├── 583a7076cb3e9-img-8451.jpg
    │   ├── 583a70894ec35-img-8452.jpg
    │   ├── 583a70964fbcb-img-8453.jpg
    │   ├── cai-8498-pa.jpg
    │   └── cai-8498-pt.jpg
    ├── [NAME]john\ doe,\ peter\ griffin\ -\ sample\ video[29.06.17][Hi-Res].jpg
    └── cover.png

所以图像肯定在那里。 现在这是我的方法,由于某种原因,它不起作用:

def count_images(folder):
    """
    Count the number of images in a folder.
    :param folder: Folder to count the images
    :return: Number of photos
    """
    print(folder)
    files = [file for file in glob.glob(folder + '/**/*.jpg', recursive=True)]
    print(files)
    return len([file for file in glob.glob(folder + '/**/*.jpg', recursive=True)])

但它只输出以下内容:

/Volumes/user/TEST/[NAME]john doe, peter griffin - sample video[29.06.17][1080]{user}/
[]

这变得非常令人沮丧,因为我看不出我做错了什么。

所以我发现了问题。 glob 模块在文件名中的某些字符存在问题 - 在本例中为 []。您可以使用 glob.escape() 来转义文件名中的这些字符。

因此最终函数将如下所示:

def count_images(folder):
    return len([file for file in glob.glob(glob.escape(folder) + '/**/*.jpg', recursive=True)])