Могу ли я просматривать каталоги и подкаталоги и сохранять определенные файлы в массиве? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть одна папка, которая содержит много подпапок и изображений в этих подпапках. У меня есть код, который перебирает папки и подпапки и распечатывает имя каждого изображения по одному. Я хочу, чтобы все эти имена изображений были сохранены в одном массиве. Как заставить мой цикл добавлять каждое имя изображения в один и тот же массив?

До сих пор я видел похожие решения только в Linux или Matlab, но не в python.

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for face_image in f :
        if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
            print(face_image)

Когда я запускаю цикл выше, я печатаю все ~ 1000 имен изображений. Но когда я тогда пытаюсь распечатать (face_image) вне цикла, печатается только имя окончательного изображения в цикле. Я теперь сейчас это потому, что я не добавил каждое имя в массив, но я не уверен, как это сделать? Любая помощь будет высоко ценится!

Ответы [ 4 ]

2 голосов
/ 22 октября 2019

Использование pathlib и рекурсивного шаблона глобуса:

from pathlib import Path

file_types = ("jpg", "png")
file_paths = []
for file_type in file_types:
    file_paths.extend(Path(".").glob(f"**/*.{file_type}"))

file_names = [file_path.name for file_path in file_paths]
1 голос
/ 22 октября 2019

После печати вы можете использовать files.append(face_image), чтобы добавить изображение лица в ваш список. По завершении цикла все допустимые имена изображений будут в списке для использования.

0 голосов
/ 22 октября 2019

Вы можете попробовать что-то вроде этого:

files = []
for r, d, f in os.walk(path):
    # collect all images
    files += [os.path.join(r, file) for file in f]
    # filter images
    files = [ff for ff in files if ff.endswith('g')]

или чуть более компактно:

files = []
for r, d, f in os.walk(path):
    # collect all images that end with 'g'
    files += [os.path.join(r, file) for file in f if file.endswith('g')]
0 голосов
/ 22 октября 2019

Я не был уверен, был ли это законный вопрос или нет. Вам нужно добавить файлы в список.

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for face_image in f :
        if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
            print(face_image)
            files.append(face_image)
...