Aktuellste Excel-Datei einlesen

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
Elsom
User
Beiträge: 4
Registriert: Montag 18. Juni 2018, 20:56

Hallo zusammen,

ich würde gerne eine bestimmte Version von Excel einlesen. Das prinzipielle Einlesen der Datei habe ich bereits. Jedoch habe ich mehrere Dateien mit dem gleichen Dateinamen, bspw.
Mitarbeiterliste110518
Mitarbeiterliste110618
Mitarbeiterliste110718 usw.
Die Datei soll monatlich automatisiert gelesen werden und davon immer die aktuellste/letzte Version.
Ich bin absoluter Neuling & habe diesbezüglich leider noch nichts finden können :(
Kann mir dabei jemand behilflich sein?

Vielen lieben Dank schon mal.
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Schau dir mal das Datetime-Modul an:

Code: Alles auswählen

import datetime
d = datetime.date.today()

dateiname = 'Mitarbeiterliste11{:02d}18'.format(d.month)
print(dateiname)

#>>> Mitarbeiterliste110618

Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Elsom: Falls Du die Dateinamen unter Kontrolle hast, solltest Du sie so benennen, das man die Namen einfach lexikografisch sortieren kann und dabei die richtige zeitliche Reihenfolge heraus kommt. Also die Datumsangabe im Namen in der Reihenfolge Jahr, Monat, Tag und nicht umgekehrt.

Dann kannst Du einfach die `max()`-Funktion auf die Dateinamen anwenden. Ansonsten müsstest Du Dir für `max()` eine entsprechende Funktion für das `key`-Argument schreiben.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Bolitho: warum formatierst Du nicht auch das Jahr?

Code: Alles auswählen

dateiname = 'Mitarbeiterliste11{:%m%y}'.format(d)
@Elsom: normalerweise benennt man Dateinamen nach dem Schema jjmmtt, dann lassen sich die Dateien einfach lexikalisch sortieren und man bekommt so auch die neueste Datei.
Elsom
User
Beiträge: 4
Registriert: Montag 18. Juni 2018, 20:56

Hallo nochmal,

zuerst einmal vielen Dank für die schnellen Antworten. Jetzt wird mir klar wie schlecht ich mein Problem erklärt habe :) Zunächst: Die Dateinamen haben ein lexikalisches Schema. Folgende Dateien stehen zur Verfügung:

Mitarbeiterliste_201703112345.XLS
Mitarbeiterliste_201808131256.XLS
Mitarbeiterliste_201806112863.XLS

Die Zahlen hinter dem Datum variieren, da diese Dateien exportiert werden und somit dabei diese Formatierung erhalten. Damit brauche ich nicht nur die aktuellste Datei, sondern muss auch die variierende Zahlenfolge berücksichtigen.

Aktuell kann ich die Datei aufrufen, jedoch eben nur eine bestimmte Datei:

Code: Alles auswählen

import xlrd

file = r'C:\Users\elsom\Desktop\Python\Test Daten Python\Mitarbeiterliste_201806185689.XLS'

wb = xlrd.open_workbook(file)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Mit os.listdir oder glob.glob bekommst Du eine Liste von Dateinamen.
Elsom
User
Beiträge: 4
Registriert: Montag 18. Juni 2018, 20:56

Sirius3 hat geschrieben: Montag 18. Juni 2018, 22:42 Mit os.listdir oder glob.glob bekommst Du eine Liste von Dateinamen.
Danke, aber ich verstehe gerade nicht wie mir die Antwort hilft??? :K

Code: Alles auswählen

import xlrd
import datetime

d = datetime.date.today()

file = r'C:\Users\elsom\Desktop\Python\Test Daten Python\Mitarbeiterliste_20{:%y%m%d}5689.XLS'.format(d)

wb = xlrd.open_workbook(file)
So funktioniert das mit dem Datum, jedoch funktioniert das dann doch auch nur wenn es eine Datei mit dem heutigen Datum gibt?! Zudem habe ich dann noch das Problem mit der Zahlenfolge hinten dran. Lässt sich dem nicht irgendwie mitgeben "egal was dann noch hinten dran steht", nimm die Datei mit dem aktuellsten Datum?!

Vielen Dank nochmal...
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Du musst mit listdir schon die real existierenden Dateien bestimmen. Und dann basierend auf dem Datum sortieren. Die letzte ist dann die gesuchte. Das „aktuellste Datum“ ist ja kein allgemeines Konzept. Das findet man also nicht magisch. Sondern man sucht durch die real existierenden Einträge.

Um sortieren zu können, musst du den Teil des Datums aus dem Dateinamen extrahieren. Zb mit String split am untersrich & dann den zweiten Teil einfach als Sortierschlüssel benutzen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du sagst selbst, dass Du das aktuelle Datum nicht kennst, also mußt Du die vorhandenen Dateinamen durchsuchen.

Code: Alles auswählen

from glob import iglob
XLS_PATTERN = r'C:\Users\elsom\Desktop\Python\Test Daten Python\Mitarbeiterliste_{:%Y%m%d}*.XLS'

newest_file_at_date = max(iglob(XLS_PATTERN.format(d)))
Elsom
User
Beiträge: 4
Registriert: Montag 18. Juni 2018, 20:56

Vielen lieben Dank, gecheckt & es läuft 8) 8) 8)
Antworten