列表中的文件路径不会加载python

时间:2016-12-27 21:18:44

标签: 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'

1 个答案:

答案 0 :(得分:-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对象没有名为seek

的函数

所以继续讨论列表问题。

尝试从列表中打印,确保它不是str

['path1', 'path2']

如果它确实是一个列表,它应该返回给你path1

如果它是一个字符串,它将返回p,这不是你想要的

接下来,看起来类Image想要一个文件对象,并且你要传递一个字符串。虽然很奇怪,你之前传递了一个字符串,它似乎有效。我的建议是尝试Image.open(open(variable))

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

我从未玩过PIL包,但是,你能做的最好的事情是在函数前后打印你的变量,确保它们是你想传递的变量

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来完成此操作。 E.g from os.path import isfile

由于没有足够的信息可以在没有所有源代码的情况下确切地确定,因此无法准确地告诉您代码的错误。但是我希望这会有所帮助,并且在事情不起作用的时候给你一些想法。