Seite 1 von 1

Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 21:07
von Elsom
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.

Re: Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 21:12
von Bolitho
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


Re: Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 21:37
von __blackjack__
@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.

Re: Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 21:37
von Sirius3
@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.

Re: Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 22:33
von Elsom
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)

Re: Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 22:42
von Sirius3
Mit os.listdir oder glob.glob bekommst Du eine Liste von Dateinamen.

Re: Aktuellste Excel-Datei einlesen

Verfasst: Montag 18. Juni 2018, 22:51
von Elsom
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...

Re: Aktuellste Excel-Datei einlesenuu

Verfasst: Montag 18. Juni 2018, 23:00
von __deets__
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.

Re: Aktuellste Excel-Datei einlesen

Verfasst: Dienstag 19. Juni 2018, 06:30
von Sirius3
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)))

Re: Aktuellste Excel-Datei einlesen

Verfasst: Dienstag 19. Juni 2018, 13:21
von Elsom
Vielen lieben Dank, gecheckt & es läuft 8) 8) 8)