2016-12-27 3 views
-1

Я могу загрузить изображение, если я жестко кодирую путь, но когда я пытаюсь забрать строку из списка, я продолжаю получать сообщение об ошибке. не уверен, что я делаю неправильно.путь к файлу из списка не загружается python

#for i in range(0,len(training_YFT)): 
    #print(training_YFT[i]) 
#image = Image.open("/media/rafael/Data1/train/YFT/img_00004.jpg") 
image = Image.open(training_YFT[0]) 
#image = Image.open(training_YFT[i]).convert("L") 
arr = np.asarray(image) 
plt.imshow(arr, cmap='gray') 
plt.pause(0.01) 
plt.show() 

Я вставил ниже сообщения об ошибке, которое я получаю. п

Traceback (most recent call last): 
    File "/home/rafael/anaconda3/lib/python3.5/site-packages/PIL/Image.py", line 2283, in open 
    fp.seek(0) 
AttributeError: 'str' object has no attribute 'seek' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "fishy.py", line 95, in <module> 
    image = Image.open(training_YFT[0]) 
    File "/home/rafael/anaconda3/lib/python3.5/site-packages/PIL/Image.py", line 2285, in open 
    fp = io.BytesIO(fp.read()) 
AttributeError: 'str' object has no attribute 'read' 
+2

очень странно. вы можете выполнить 'dir (training_YFT [0])' и показать нам результаты? –

+0

спасибо, что проблема в первом элементе моего списка пуста. –

+0

Я проверил его с пустой строкой, и я получил сообщение «нет такого файла или каталога», как ожидалось. Странно (я считаю, что с тех пор, как в сообщениях указано, что объект 'str' был передан, но это должно было попытаться открыть файл, а не искать его) –

ответ

-1
Traceback (most recent call last): 
    File "/home/rafael/anaconda3/lib/python3.5/site-packages/PIL/Image.py", line 2283, in open 
    fp.seek(0) 
AttributeError: 'str' object has no attribute 'seek' 

Таким образом, первая ошибка в том, что объект, который вы пытаетесь назвать это file объект, но переменная фактически строковый объект.

str И объект не имеет функцию с именем искать

Так как перейти к проблеме списка.

Попробуйте выполнить печать из списка, гарантируя, что это не str

['path1', 'path2']

, если это действительно список, он должен вернуться к вам path1

если это строка , он вернет p, а это не то, что вы хотите

Далее, класс Image хочет создать файл-объект, и вы передаете ему строку. Хотя странно, что вы передали ему строку раньше, и это, казалось, сработало. Мое предложение попробовать Image.open(open(variable))

AttributeError: 'str' object has no attribute 'read'

Я никогда не играл с пакетом PIL, но, самое лучшее, что вы можете сделать, это распечатать переменные до и после функции, убедитесь, что они являются переменными, вы» d хотел бы пройти

print(training_YFT) 
if not type(training_YFT) == list: print('training_YFT IS NOT A LIST, you\'re giving the function '+training_YET[0]+'!') 
image = Image.open(training_YFT[0]) 
print(image) 
arr = np.asarray(image) 
plt.imshow(arr, cmap='gray') 
plt.pause(0.01) 
plt.show() 

Другое предложение, обеспечивающее существование пути к файлу. Вы можете сделать это, импортировав файл os.path isfile. Например, from os.path import isfile

Невозможно точно рассказать вам, что не так с вашим кодом, поскольку недостаточно информации для точного определения без всего исходного кода. Но я надеюсь, что это помогло, и дал вам идеи попробовать, когда все не работает.

+0

Если вы посмотрите на документы PIL, они, похоже, показывают, что передача строка ИЛИ файл в порядке. –