2017-08-24 4 views
0

Ich arbeite auf Transfer-Ordner von Dateien über Uart in Python. Unten sehen Sie einfache Funktion, aber es gibt ein Problem, weil ich Fehler wie im Titel bekomme: IOError: [Errno 2] Keine solche Datei oder Verzeichnis: '1.jpg' wo 1.jpg ist eine der Dateien im Testordner. Es ist also ziemlich seltsam, da Programm den Dateinamen kennt, der dafür nicht existiert?! Was mache ich falsch?IOError: [Errno 2] Keine solche Datei oder Verzeichnis (wenn es wirklich existiert) 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

Und https://stackoverflow.com/questions/9765227/ioerror-errno-2-no-such-file- or-Verzeichnis-versuchen-zu-öffnen-eine-Datei und https://stackoverflow.com/questions/36477665/python-on-windows-ioerror-errno-2-no-such-file-or-directory –

+0

Vielleicht benutze 'glob.glob ('/ home/pi/Downloads/test/*') 'stattdessen ... –

Antwort

1

Sie müssen den tatsächlichen vollständigen Pfad der Dateien, die Sie öffnen möchten, bieten, wenn sie nicht in Ihrem Arbeitsverzeichnis sind:

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() nur bloße Dateinamen zurückgibt, nicht voll qualifizierte Pfade. Diese Dateien (wahrscheinlich?) Befinden sich nicht in Ihrem aktuellen Arbeitsverzeichnis, daher ist die Fehlermeldung korrekt - die Dateien existieren nicht an dem Ort, an dem Sie sie suchen.

Einfach fix:

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

Ja, Code Raise Fehler, weil Datei, die Sie öffnen, an der aktuellen Position aus nicht vorhanden ist, wo Python-Code ausgeführt wird.

os.listdir(path) gibt die Liste der Namen von Dateien und Ordnern vom angegebenen Speicherort zurück, nicht den vollständigen Pfad.

Verwenden Sie os.path.join(), um den vollständigen Pfad in for Schleife zu erstellen. z.B.

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

Dokumentation:

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