web-dev-qa-db-fra.com

IOError: [Errno 2] Aucun fichier ou répertoire de ce type (quand il existe vraiment) Python

Je travaille sur le dossier de transfert de fichiers via uart en python. Ci-dessous, vous voyez une fonction simple, mais il y a un problème car j'obtiens une erreur comme dans le titre: IOError: [Errno 2] No such file or directory: '1.jpg' où 1.jpg est l'un des fichiers du dossier de test. C'est donc assez étrange parce que le programme connaît le nom de fichier qui n'existe pas?! Qu'est-ce que je fais mal?

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

Vous devez fournir le chemin d'accès complet réel des fichiers que vous souhaitez ouvrir s'ils ne se trouvent pas dans votre répertoire de travail:

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() renvoie simplement les noms de fichiers nus, pas les chemins d'accès complets. Ces fichiers (probablement?) Ne se trouvent pas dans votre répertoire de travail actuel, donc le message d'erreur est correct - les fichiers n'existent pas à l'endroit où vous les recherchez.

Solution simple:

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

Oui , le code génère une erreur car le fichier que vous ouvrez n'est pas présent à l'emplacement actuel d'où python est en cours d'exécution) .

os.listdir(path) renvoie la liste des noms de fichiers et de dossiers à partir d'un emplacement donné, pas le chemin complet.

utilisez os.path.join() pour créer le chemin complet dans la boucle for. par exemple.

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

Documentation:

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