FileNotFound Error Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Leonidas1501
User
Beiträge: 2
Registriert: Montag 23. Mai 2022, 11:53

Hallo zusammen :)

ich schreibe grade an einem skript, welches sich aus einem Ordner eine Liste aus videos nimmt und dann mit einer schleife über eben jene iteriert um z.B. Grauwerte und ähnliches daraus zu ziehen.

Diese grauwerte speichere ich dann über np.savetxt() in einem ordner den ich zuvor über os.makedir() angelegt habe.
Nun ist es so dass dies auch an jeder Stelle meines codes (ausgenommen von einer) funktioniert.
Bei der einen stelle an der das eben nicht funktioniert bekomme ich die Meldung FileNotFound: Errno 2 No such file or directorty.

Der Pfad ist absolut angegeben und es gibt auch durchläufe in denen die funktion tut was sie soll.

Es ist für mich nicht verständlich, dass die Funktion manchmal funktioniert und manchmal nicht, da eine nahezu ähnliche Funktion(nur anderer Pfad) an anderer stelle im skript dieses Problem nicht auslöst

Den Pfad lege ich wie folgt an:

Basispfad=r'C:/Users/Guest/Desktop/Daten/Versuchsreihe/Spalt/Für Auswertung/Auswertung'
Dateiname=str(Variable1 + Variable2)

if not os.path.exists(os.path.join(Basispfad, Dateiname, "Schmelzbadlänge","SchmelzbadlängenHistogramme","SchmelzbadlängenHistogrammeCSV")):
os.makedirs(os.path.join(
Basispfad, Dateiname,"Schmelzbadlänge","SchmelzbadlängenHistogramme","SchmelzbadlängenHistogrammeCSV"))


Das array speichere ich wie folgt: (Filter ist hier eine Variable mit integer,Schmelzbadlängen das array)


np.savetxt(
os.path.join(Basispfad, Dateiname, "Schmelzbadlänge", "SchmelzbadlängenHistogramme","SchmelzbadlängenHistogrammeCSV",
str("SchmelzbadlängeCSV" + Filter + '.csv')), Schmelzbadlängen, fmt='%1.2f', delimiter=",")



Vorab vielen dank für die Hilfe
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Du solltest dir das Modul "pathlib" anschauen. Das ist das Werkzeug, mit dem man aktuell auf Dateien und Verzeichnissen operiert.

Warum baust du dir denn ständig neu den Pfad zusammen, statt ihn dir zu merken?

Zeuchenketten baut man nicht mit + zusammen sondern verwendet .format oder f-Strings:

Code: Alles auswählen

name = "Klaus"
print(f"Hallo {name}")
Und wenn dein Fehler manchmal auftritt und manchmal nicht, dann hat das ziemlich simplen den Grund: Manchmal ist der Pfad da - und manchmal nicht.
Mehr kann man ohne Code dazu nicht sagen.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablennamen schreibt man generell komplett klein. Konstanten dagegen KOMPLETT_GROSS.
Raw-Strings braucht man nur, wenn man \ nicht escapen will.
Wenn man zwei Strings mit + zusammensetzt bekommt man wieder einen String, den mit str umzuwandeln ist überflüssig.
Es ist komisch, dass ein Dateiname als Verzeichnis vorkommt.
Erst zu Prüfen, ob ein Pfad existiert und ihn dann zu erstellen ist fehlerbehaftet, weil zwischen Prüfung und Erstellen viel passieren kann.
Zum Arbeiten mit Pfaden gibt es pathlib:

Code: Alles auswählen

from pathlib import Path

BASIS_PFAD = Path('C:/Users/Guest/Desktop/Daten/Versuchsreihe/Spalt/Für Auswertung/Auswertung')

csv_path = BASIS_PFAD / dateiname / "Schmelzbadlänge" / "SchmelzbadlängenHistogramme" / "SchmelzbadlängenHistogrammeCSV"
csv_path.mkdir(exist_ok=True, parents=True)
np.savetxt(csv_path / f"SchmelzbadlängeCSV{filter}.csv", schmelzbadlängen, fmt='%1.2f', delimiter=",")
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich gestatte mir mal die Anmerkung, dass SchmelzbadlaengeCSV.csv doppelt gemoppelt ist. Die Endung ist doch eindeutig. Warum noch CSV dazu, und wenn, warum nicht "DateiAufMeinemRechner"?
Leonidas1501
User
Beiträge: 2
Registriert: Montag 23. Mai 2022, 11:53

Vielen Dank für die schnellen Rückmeldungen, habe mein skript jetzt nochmal mit pathlib aufgebaut (btw. deutlich einfacher und aufgeräumter als vorher, Danke für den Hinweis!).
Das gleiche problem besteht weiterhin. An der gleichen stelle.

Habe vor das np.savetxt() noch

if not os.path.exists(SchmelzbadlängenHistogrammeCSVPfad)

gesetzt um mir ausgeben zu lassen wann der Pfad nicht besteht.

Die komplette Fehlermeldung ist folgende:

Traceback (most recent call last):
File "C:/Users/Guest/Desktop/Pixelauslesen13PATHLIB.py", line 1706, in <module>
ErstellungDesSchmelzbadlängenHistograms(MaxAbkühlungenAllerFilter)
File "C:/Users/Guest/Desktop/Pixelauslesen13PATHLIB.py", line 656, in ErstellungDesSchmelzbadlängenHistograms
np.savetxt(SchmelzbadlängenHistogrammeCSVPfad / f"Schmelzbadlängenhistogramm{Filter}.csv", Schmelzbadlängen, fmt='%1.2f',
File "<__array_function__ internals>", line 180, in savetxt
File "C:\Users\Guest\Desktop\Daten\Skripte\venv\lib\site-packages\numpy\lib\npyio.py", line 1383, in savetxt
open(fname, 'wt').close()
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Guest\\Desktop\\Daten\\Versuchsreihe\\Spalt\\Für Auswertung\\Auswertung\\IRfilter+Rotfilter_Default_o4Dreifach-40kfps-23_S0001 - Kopie.mp4_2022-05-23\\Schmelzbadlängen\\SchmelzbadlängenHistogramme\\SchmelzbadlängenHistogrammeCSV\\Schmelzbadlängenhistogramm0.csv'


Liegt es evtl an Numpy oder der Dateibenennung? Der Pfad existiert ja definitiv!
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Namen schreibt man in Python klein_mit_unterstrich. __deets__ hat dir doch das komplette Rezept gegeben.
Zeig doch bitte, wie du das umsetzt und nicht nur so Häppchenweise. Dass das System sich täuscht und das Verzeichnis da ist, ist ja eherunwahrscheinlich.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@sparrow: ich glaube du meinst Sirius3 - ich habe ja nur leicht rumgemaekelt :D
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Leonidas1501: Kann es an der perversen Länge von dem Pfad liegen? Sind das schon mehr als 260 Zeichen? Und wäre das nicht die maximale Pfadlänge unter Windows‽
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten