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() 

エラーメッセージが表示されています。 nは

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

私はそれを空の文字列でテストしましたが、 "no such file or directory"というメッセージが期待どおりに表示されていました。奇妙な(私は '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オブジェクトが呼び出された関数は、だから、リストの問題に移る

を求める必要はありません。

は、それが実際にリストされている場合、それは文字列の場合、それはあなたにpath1

を返す必要がありますstr

['path1', 'path2']

ではないことを保証し、リストから印刷してみてください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をインポートします。例:すべてのソースコードがなくても正確に判断するのに十分な情報がないため、コードに何が間違っているかを正確に伝える方法はありません。しかし、私はこれが助けられ、物事がうまくいかないときに試してみることをお勧めしました。

+0

PILドキュメントを見ると、文字列またはファイルはOKです。 –

関連する問題