Вы получаете исключение, потому что вместо имени файла вы передаете список Image.open
.
Однако основные проблемы, которые я вижу, связаны с неправильным использованием os.walk
и glob.glob
.
Я предлагаю внимательно прочитать документацию, прежде чем использовать функции, которых вы не знаете.
уточнение:
os.walk
не возвращает имена файлов в path
, но, рекурсивно, каталог (dirpath
), список подкаталогов (dirnames
) и список файлов в каталоге ( filenames
). Вы можете получить все имена файлов, просто набрав os.path.join(dirpath, name)
для каждого name
in in filenames
.
glob.glob
возвращает список файлов, соответствующих заданным групповым символам. Из вашего кода я предполагаю, что вы ожидаете, что f'{root}{r}/{file}'
- это имя файла в системе, поэтому нет необходимости усложнять вашу жизнь, используя glob.glob
пара замечаний:
- , поскольку у вашего
root
уже есть трейлинг /
, вызов os.path.join(root,"")
ничего не делает;
если вы хотите создавать пути к файлам программным способом, не добавляйте разделители путей вручную, но старайтесь максимально использовать os.path.join
(или при необходимости os.sep
) (это помогает поддерживать кросс-систему совместимость). Как пример вместо того, чтобы делать
root = "E:/Image/"
r = 'folder'
file = 'test.txt'
fname = f'{root}{r}/{file}'
использование
root = "E:/Image"
r = 'folder'
file = 'test.txt'
fname = os.path.join(root, r, file)
код
А теперь «правильный» код. Поскольку я не знаю вашу структуру каталогов, регистр пользователя и т. Д., Код теперь может работать так, как вы хотите, но я надеюсь, что вы сможете адаптировать его под свои нужды.
import os
from PIL import Image
root = "E:/Image/"
for dirpath, _, filenames in os.walk(path):
# we don't care about ``dirnames``
for name in filenames:
fname = op.path.join(dirpath, name)
img1 = Image.open(fname)
img1.show()