【问题标题】:Python3.5 recursive glob not showing matching filesPython3.5递归glob不显示匹配文件
【发布时间】:2017-07-11 19:01:39
【问题描述】:

使用 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}/
[]

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

【问题讨论】:

  • 试试'/**/**/*.jpg'
  • @cᴏʟᴅsᴘᴇᴇᴅ 没有区别

标签: python-3.x glob


【解决方案1】:

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

所以最终的函数会是这样的:

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

【讨论】:

  • 你有这方面的文件吗?尝试查找是否有其他字符 glob 有问题。
  • @DavidoWidre 否,但您可以检查 escape() 函数的确切作用。很可能是一种字符替换形式。
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 2015-08-29
  • 2013-04-14
  • 1970-01-01
  • 2021-06-24
  • 2015-06-14
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多