2017-08-24 5 views
0

Je travaille sur le dossier de transfert de fichiers via uart en python. Ci-dessous vous voyez la fonction simple, mais il y a un problème parce que j'obtiens une erreur comme dans le titre: IOError: [Errno 2] Aucun fichier ou répertoire: '1.jpg' où 1.jpg est l'un des fichiers dans le dossier de test. Donc c'est assez étrange parce que le programme connaît le nom de fichier qui n'existe pas pour ça! Qu'est-ce que je fais mal?IOError: [Errno 2] Aucun tel fichier ou répertoire (quand il existe vraiment) Python

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) 
+0

Et https://stackoverflow.com/questions/9765227/ioerror-errno-2-no-such-file- ou-directory-essay-to-open-a-file, et https://stackoverflow.com/questions/36477665/python-on-windows-ioerror-errno-2-no-such-file-or-directory –

+0

utilisez 'glob.glob ('/ home/pi/Downloads/test/*') 'à la place ... –

Répondre

1

Vous devez fournir le chemin complet réel des fichiers que vous souhaitez ouvrir si elles ne sont 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) 
1

os.listdir() renvoie simplement les noms de fichiers et non avec des chemins qualifiés. Ces fichiers (probablement?) Ne sont 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.

fix simple:

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

Oui, augmentation de code erreur parce que le fichier que vous ouvrez est pas présent à l'emplacement actuel où le code 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é, et non du chemin complet. Utilisez os.path.join() pour créer le chemin complet dans for boucle. par exemple.

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

Documentation:

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