Включите подстановочный знак в функцию os.path.join () для создания пути к файлу - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь открыть файл изображения в указанной папке c. Я не знаю, как объяснить структуру папок с помощью кода, поэтому я иллюстрирую ее по уровням. Структура папок выглядит следующим образом:

level 1: data 
level 2: data\channel1                        data\channel2
level 3: data\channel1\morning                data\channel2\morning
             \channel1\evening                data\channel2\evening

level 4: data\channel1\morning\images.png     data\channel2\morning\images.png
         data\channel1\evening\images.png     data\channel2\evening\images.png

#where: 'images.png' are the image files

Это упрощенная версия, но на самом деле есть много папки под уровнем 3 категории. например, утро, вечер, полдень, полночь и т. д. c. Я хочу извлечь изображения без учета этого 3-го уровня

from PIL import Image
import os
import pandas as pd:

root = os.getcwd()
img_file_loc = Path('data')
channels = ['channel1', 'channel2']
file_name = 'star.png'

temp = []
for channel in channels:
    img_file_path = os.path.join(root, img_file_loc, channel, '\\*\\', file_name)
    x = Image.open(img_file_path)
    temp.append(x)

Я попытался использовать подстановочный знак, но он выдает ошибку, как показано ниже:

OSError: [Errno 22] Invalid argument: ...'\\*\\star.png'

Есть ли лучший способ делать это?

1 Ответ

1 голос
/ 25 марта 2020

Я бы использовал rglob из pathlib.

from pathlib import Path

img_file_loc = Path('path/to/data')
channels = ['channel1', 'channel2']
file_name = 'star.png'

for channel in channels:
    img_files = img_file_loc.rglob(file_name)
    for img_file in img_files:
        x = Image.open(img_file_path)
        temp.append(x)
...