Seite 1 von 1

Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 11:53
von Eneri_Gnats
Hallo Zusammen,

Ich habe folgendes Problem:

Ich möchte ein dataframe als csv speichern und zwar in einem Ordner den ich beim durchlaufen des Skriptes erstelle (mithilfe eines Zeitstempels sollen die Ordner unterschiedlich benannt werden).
Mein Code sieht wie folgt aus:

Code: Alles auswählen

namecsv = now.strftime('%d.%m_%H.%M.%S')
speicherpfad = os.getcwd()+ '\\Ergebnisse\\'
Ordner = 'Berechnung_' + namecsv 
os.mkdir(os.path.join(speicherpfad, Ordner))
bei os.mkdir tritt der fehler auf. Der ORdnerpfad wird nicht gefunden:
FileNotFoundError: [WinError 3] Das System kann den angegebenen Pfad nicht finden: 'C:\\Users\\igors\\Documents\\Projekte\\Simulationsumgebung\\Ergebnisse\\Berechnung_14.02_11.36.38'

Wie kann ich den Ordner richtig ansprechen und darin den Ordner Berechnung_aktuelles Datum anlegen

Die nächste Frage ist wie ich dann in diesem Ordner die csv datei speichern kann?

Code: Alles auswählen

df.to_csv(os.path.join(speicherpfad, r'Doc.csv'), index = False)
ich hoffe es kann mir hier jemand helfen :)

Viele Grüße
Eneri

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 13:17
von __deets__
os.mkdir kann nur das *letzte* Verzeichnis erstellen, das in einem Pfad angegeben wurde. Es gibt aber auch noch os.makedirs.

Und dann solltest du deinen Ordner auch als Variable ablegen, und nicht on-the-fly in allen moeglichen Ausdruecken per os.path.join zusammenstoppeln. Sondern einmal

Code: Alles auswählen

ordner = os.path.join(speicherpfad, 'Berechnung_{}'.format(namecsv)
Denn dann kannst du den immer weiter benutzen, und machst keinen Fehler wie gezeigt im df.to_csv, denn da fehlt ja der eigentliche Unterordner ploetzlich wieder.

Last but not least: du benutzt doch schon os.path.join mehrfach, warum nicht auch bei der Erstellung von speicherpfad?

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 13:56
von Eneri_Gnats
Danke für die Schnelle Antwort.

so hab ich das jetzt angepasst: ich sage das speicherpfad der folgende Pfad ist bis zum Ordner Ergebnisse, den es gibt. Die variable ordner Joint den speicherpfad und den zu erstellenden Ordner der abhängig von der Zeit benannt sein soll. dazu die variable "namecsv"

Code: Alles auswählen

namecsv = now.strftime('%d.%m_%H.%M.%S')

speicherpfad = os.getcwd()+ '\\Ergebnisse\\' # diesen Ordner gibt es schon
ordner = os.path.join(speicherpfad, 'Berechnung_{}'.format(namecsv) )# der Ordner 'Berechnung_aktuellezeit' soll angelegt werden
os.mkdir(ordner) #der letzte Eintrag "Berechnung_aktuelle Zeit" soll erstellt werden
df.to_csv('dataframe.csv') # dataframe in csv wo wird das jetzt gespeichert?
die csv Datei soll in diesem erstellten Ordner gespeichert werden. aber wie sag ich der df.to_csv wo sie das Doc speichern soll?

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 14:09
von Sirius3
Pfade stückelt man nicht mit + zusammen und die Methoden aus os sind auch zu low-level, als dass man sie benutzen möchte.
Statt dessen benutzt man pathlib.Path. Datumsangaben in Dateinamen sollten immer die Form YYYY-mm-dd-HH-MM-SS haben, also von großen nach kleinen Zeiteinheiten sortiert sein.

Code: Alles auswählen

from pathlib import Path
SPEICHERPFAD = Path("Ergebnisse").absolute()

aktuelle_zeit = now.strftime('%Y.%m.%d_%H.%M.%S')
ordner = SPEICHERPFAD / f"Berechnung_{aktuelle_zeit}"
ordner.mkdir()
df.to_csv(ordner / 'dataframe.csv')

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 14:23
von Eneri_Gnats
bin mir nicht sicher ob ich das jetzt richtig umgesetzt habe weil immer noch eine Fehlermeldung auftaucht:
Fehlermeldung:
FileNotFoundError: [WinError 3] Das System kann den angegebenen Pfad nicht finden: 'C:\\Users\\igors\\Documents\\Projekte\\Simulationsumgebung\\Ergebnisse\\Berechnung_02.14_14.19.46'

Code:

Code: Alles auswählen

df = pd.DataFrame({'PI_system': overloads_pi_flow[0]})

speicherpfad = Path("Ergebnisse").absolute()
aktuelle_zeit = now.strftime('%m.%d_%H.%M.%S')
ordner = speicherpfad / f"Berechnung_{aktuelle_zeit}"
ordner.mkdir()
df.to_csv(ordner / 'dataframe.csv')
der fehler tritt ein bei ordner.mkdir() kann es sein dass es daran liegt dass mein rechner nicht mit den "\\" klar kommt und eher "\" brauch?

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 14:52
von Eneri_Gnats
wenn ich speicherpfad = r'C:\Users\igors\Documents\Projekte\Ergebnisse' setze dann wird der pfad gefunden. aber ich will den speicherpfad variable haben und nicht fix da ich an verschiednen Rechnern arbeite

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 14:55
von Sirius3
Das übergeordnete Verzeichnis existiert noch nicht. `ordner.mkdir` hat dafür passende Parameter.
Warum hast Du das Jahr aus dem Datum herausgenommen? Bist Du sicher, dass nächstes Jahr das Programm nicht mehr eingesetzt wird?

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 15:03
von Eneri_Gnats
ja genau nächstes Jahr wird das ganze nicht mehr verwendet (ist meine Masterarbeit) der Doktorand wird die ausführliche Dokumentation nicht benötigen.
mit übergeordnetes Verzeichnis meinst du den Ordner "Ergebnisse"? den gibt es aber bereits.

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 15:32
von __deets__
Irgendeinen Pfad gibt es nicht. Schau ganz genau hin, wir koennen ja nicht wissen, was da auf deinem System so los ist. Ich wuerde zum Test oder gar generell auch einen absoluten Pfad verwenden, denn sonst legt das Skript relativ zum Arbeitsverzeichnis Dateien an. Ist das gewollt? Also, ist das ein Feature?

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 15:41
von Eneri_Gnats
Ja das ist gewollt weil ich an unterschiedlichen rechnern arbeit und die Dokumente immer im ordern "Ergebnisse" in einem Unterorder "Berechnung_..Zeit.." gespeichert werden sollen.
Den Ordner Ergebnisse gibt es. ich denke das Problem sind die \\ im Pfad. Eigentlich sollten es \ also nur einmal sein damit es als pfad erkannt wird oder?
ich sollte herausfinden wie ich die variable "speicherpfad" so erstelle dass nur ein \ angegeben wird...geht das?

Re: Ordnerpfad finden und Ordner einfügen

Verfasst: Freitag 14. Februar 2020, 15:46
von __deets__
Ich denke nicht, dass die \\ das Problem sind. Aber wenn sie es waeren, kannst du sie mit einem / ersetzen. In normalen Python-Strings musst du \\ schreiben, damit du mit \ endest. Das hat was mit string-escaping zu tun. Auf jeden Fall ist es nicht das Problem. Ich wuerde mir mal print(ordner) ausgeben lassen, direkt bevor das mkdir versucht wird. Und dann *SEHR* genau hinschauen, auch und gerade in Bezug auf Leerzeichen im Pfad, ob das denn alles so stimmt. Und du musst natuerlich die Berechtigung haben, im Pfad auch ein Verzeichnis anlegen zu duerfen.