CSV-Dateien mit Datum als Name nacheinander abarbeiten

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
alfredsc
User
Beiträge: 5
Registriert: Donnerstag 7. Januar 2021, 18:49

Hallo,

wie kann ich Dateien mit Datumsnamen nacheinander in Python abarbeiten?
Ich habe z.B. ein Verzeichnis mit folgenden Dateien:
20210812.csv
20210813.csv
20210814.csv
20210815.csv
20210816.csv
20210817.csv
Die enthaltenen Daten sollen in eine Excel-Datei überführt werden (das habe ich schon hinbekommen). Ich scheitere jetzt nur daran, dass Python automatisch die Dateinamen erkennt und dementsprechend eine nach der anderen nimmt.
Das ganze ist in mehreren Verzeichnissen, die Anzahl der Dateien bzw. die älteste Datei ist aber jedesmal anders. Mir würde es theoretisch schon reichen wenn ich per Python die Datei mit dem ältesten Dateinamen ausfindig machen könnte, dann könnte ich bis "gestern" hochzählen, die Dateien sind jedenfalls immer lückenlos bis zum Vortag.

Gruß
Alfred
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Wie sieht denn der Code aus, mit der du im Augenblick den Pfad ermittelst?
alfredsc
User
Beiträge: 5
Registriert: Donnerstag 7. Januar 2021, 18:49

Der Pfad habe ich fest vorgegeben per
os.chdir ("Z:\\Alfred\\Downloads\Strom\ID00016")
Ich dachte ich könnte einfach den heutigen Tag ermitteln, und die entsprechende Anzahl Dateien abziehen, aber das funktioniert beim Übergang in den nächsten Monat natürlich nicht mehr.
Habe ich zunächst nicht daran gedacht, deshalb müssten eigentlich alle Dateinamen ausgelesen und nacheinander abgeabreitet werden.
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Verwende nicht os.chdir. Damit wechselst du das Arbeitsverzeichnis - das ist nicht das was du willst.
Schau dir pathlib.Path und deren glob-Funktion an.

Code: Alles auswählen

from pathlib import Path
example_path = Path("Z:/Alfred/Downloads/Strom/ID00016")
for file in example_path.glob("**/*.csv"):
    print(file)
Die Unterscheidung nach Datum habe ich noch nicht ganz verstanden. Willst du bei jedem Durchlauf des Programms alle Dateinamen/Inhalte übertragen? Oder nur die von gestern? Oder nur die, die noch nicht übertragen worden sind?
Benutzeravatar
__blackjack__
User
Beiträge: 14065
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wichtig zu dem Beispiel von einfachTobi wäre noch zu erwähnen, dass `glob()` keine Reihenfolge garantiert. Also auch wenn die Ausgabe von dem Code scheinbar in der richtigen Reihenfolge sein sollte, ist das nicht garantiert. Man muss also explizit sortieren. So wie die Dateinamen aussehen, kann man das einfach lexikographisch machen weil die Namen im Format YYYYMMDD.csv zu sein scheinen.

Und wenn man paranoid ist, könnte man noch den Namen prüfen ob der tatsächlich nur ein gültiges Datum + ".csv" ist, bevor man die Datei verarbeitet.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten