I can find all the files in the subfolders of a folder path with specific filetypes in this way:
list(Path(folder_path).glob('**/*.[jpg][jpeg][png]*'))
But if I change the code to try and find other filetypes (like jfif or bmp), with some filetypes the code works and with the others, it can't find the filepaths:
list(Path(folder_path).glob('**/*.[jpg][jpeg][jfif][png]*'))
Why isn't this code working properly?
CodePudding user response:
According to the pathlib docs, the pattern syntax is the same as for fnmatch. A pattern like [jpg] matches a single character, which is either a j, a p or a g. I don’t think this type of pattern can handle alternatives — you have to use some other mechanism for filtering; something like foo.suffix in [...] or a regexp.
CodePudding user response:
Regex style "solution":
from pathlib import Path
from re import search, IGNORECASE
folder_path = "."
images = r".*\.(jpg|jpeg|jfif|png)$"
files = list(filter(lambda f: search(images, str(f)), Path(folder_path).rglob("*")))
