Matplotlib не может открыть файл * .jpg

У меня есть изображения * .jpg в каталоге "собаки", и я могу получить доступ к первому из них, как показано ниже:

import os
os.chdir(os.path.expanduser('~/fastai/data/dogscats'))
cwd=os.getcwd()
dog=os.listdir(os.path.join(cwd,'valid/dogs'))[0]
print (dog)

dog.5535.jpg

проблема в том, что когда я пытаюсь построить изображение с помощью matplotlib, он не может найдите изображение:

%matplotlib inline
import matplotlib.pyplot as plt
plt.imread(dog)

FileNotFoundError: [Errno 2] No such file or directory: 'dog.5535.jpg'

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

однако я могу прочитать «dog.5535.jpg», если помещу изображение на рабочий стол и укажу путь к plt.imread(). Я что-то упускаю?

Спасибо

Могут быть проблемы с точками в имени файла, пробовали ли вы открыть файл без точки или с точкой, замененной на подчеркивание? И второй сценарий запускается с того же места, что и первый?

G. Anderson 11.10.2018 18:56

@ g-anderson-Я пытался заменить 'dog .; в моем имени файла с '', но ошибка осталась той же

A.E 11.10.2018 19:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
907
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из этих строк:

dog=os.listdir(os.path.join(cwd,'valid/dogs'))[0]
print (dog)
#OUT: dog.5535.jpg

похоже, что есть файл dog.5535.jpg с полным относительным путем (относительно текущего рабочего каталога) valid/dogs/dog.5535.jpg. Однако переменная dog содержит только имя файла. Поэтому, когда вы пытаетесь

%matplotlib inline
import matplotlib.pyplot as plt
plt.imread(dog)

Он ищет dog.5535.jpg в вашем текущем рабочем каталоге, где файла нет. Исходя из cwd, вам все равно нужно добавить остальную часть пути:

%matplotlib inline
import matplotlib.pyplot as plt
plt.imread(dog)
os.path.join('valid', 'dogs', dog)
#or os.path.join(cwd, 'valid', 'dogs', dog)

Обратите внимание, что я также изменил часть valid/dogs в функции path.join, поскольку указание разделителей путей в аргументе для path.join лучше, чем использование path.join.

@ FlyingTeller-Спасибо

A.E 11.10.2018 19:27

Другие вопросы по теме