web-dev-qa-db-ja.com

IOError:[Errno 2]そのようなファイルまたはディレクトリはありません(実際に存在する場合)Python

私は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)
3
user8207105

ファイルが作業ディレクトリにない場合は、開きたいファイルの実際の完全パスを指定する必要があります。

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)
6
PRMoureu

os.listdir()は、完全修飾パスではなく、単なるファイル名を返します。これらのファイル(おそらく?)は現在の作業ディレクトリにないため、エラーメッセージは正しいです-ファイルは、探している場所に存在しません。

簡単な修正:

for x in arr:
    with open(os.path.join(path, x), 'rb') as fh:
        …
2

はい、開いているファイルがpythonコードの実行中の現在の場所に存在しないため、コードがエラーを発生させます。

os.listdir(path)は、フルパスではなく、指定された場所からのファイルとフォルダの名前のリストを返します。

forループでフルパスを作成するには、os.path.join()を使用します。例えば.

file_path = os.path.join(path, x)
with open(file_path, 'rb') as fh:
       .....

ドキュメンテーション:

  1. os.listdir(..)
  2. os.path.join(..)
1
Vivek Sable