私はPythonでuartを介してファイルの転送フォルダーに取り組んでいます。以下に単純な関数を示しますが、タイトルのようにエラーが発生するため問題があります:IOError: [Errno 2] No such file or directory: '1.jpg'
ここで、1.jpgはテストフォルダ内のファイルの1つです。プログラムが存在しないファイル名を知っているので、それはかなり奇妙です!私は何を間違っていますか?
def send2():
path = '/home/pi/Downloads/test/'
arr = os.listdir(path)
for x in arr:
with open(x, 'rb') as fh:
while True:
# send in 1024byte parts
chunk = fh.read(1024)
if not chunk: break
ser.write(chunk)
ファイルが作業ディレクトリにない場合は、開きたいファイルの実際の完全パスを指定する必要があります。
import os
def send2():
path = '/home/pi/Downloads/test/'
arr = os.listdir(path)
for x in arr:
xpath = os.path.join(path,x)
with open(xpath, 'rb') as fh:
while True:
# send in 1024byte parts
chunk = fh.read(1024)
if not chunk: break
ser.write(chunk)
os.listdir()
は、完全修飾パスではなく、単なるファイル名を返します。これらのファイル(おそらく?)は現在の作業ディレクトリにないため、エラーメッセージは正しいです-ファイルは、探している場所に存在しません。
簡単な修正:
for x in arr:
with open(os.path.join(path, x), 'rb') as fh:
…
はい、開いているファイルがpythonコードの実行中の現在の場所に存在しないため、コードがエラーを発生させます。
os.listdir(path)
は、フルパスではなく、指定された場所からのファイルとフォルダの名前のリストを返します。
for
ループでフルパスを作成するには、os.path.join()
を使用します。例えば.
file_path = os.path.join(path, x)
with open(file_path, 'rb') as fh:
.....
ドキュメンテーション: