Dokumentarten bestimmen am Dateinamen
Problembeschreibung
Oftmals wird im Dateinamen der Dokumententyp angegeben. Manchmnala auch am Ende.
Dabei kann es vorkommen, dass verschiedene Syntaxen verwendert werden.
z.B. ist 213234-RE.pdf
und 345-213234kdeRechnung.pdf
jeweils vomm Typ Rechnung
Erklärung
in dem Beispiel sind mehrere Herausforderungen enthalten:
- Die Länge des Dokumentes ins ungleich auch splitting funktioniert nicht
- Der Typ steht am Ende des Dateinamnes
- Der Typ ist nicht einheitlich vergeben
Um die richtigen werte zu bekommen wird eine verschachteltet IF Abfrage verwendet und das Ende des Strings betrachtet.
Lösung
folgender String ist die fertig Lösung die Einzel Elemente werden unten erklärt Der Befehl unterscheidert zwischen
- Rechnungsausgang
- Angebot
- Gutschrift
- Auftragsbestätigung
Alle Andere Dokumente werden als
- nicht zugeordnet
abgelegt
'Rechnungsausgang' if str(<file_name>)[:-4].lower().endswith(('rg','rechnung','wartungsrechnung','schlussrechnung')) else 'angebot' if str(<file_name>)[:-4].lower().endswith(('an','angebot')) else 'gutschrift' if str(<file_name>)[:-4].lower().endswith(('gutschri', 'gutschrift','gs')) else 'Auftragsbestätigung' if str(<file_name>)[:-4].lower().endswith(('ausbestä','auftragsbestätigung','au')) else 'nicht zugeordnet'
zunächst der erste Abschitt
'Rechnungsausgang' if str(<file_name>)[:-4].lower().endswith(('rg','rechnung','wartungsrechnung','schlussrechnung')) else
Es wird Rechnungsausgang ausgegeben wenn die bedingung erfüllt ist. die Bedingung (if) kommt nach dem if. also
in der if Bedingung werden mehrere Dinge durchgeführt:- Es wird auf den Dateinamen referenziert mit:
<file_name>
- Die letzten 4 Zeichen des Dateinamens werden entfernt
[:-4]
(also wird aus z.B.213234-RE.pdf 213234-RE) - Der ganze Dateiname wird für die Prüfung in kleinbuchstaben verwandelt. Es ist also egal ob das Dokument 213234-RE.pdf oder 213234-re.pdf heißt
- Zum Schluss wird geprüft ob der Dateinamen entweder mit rg oder mit rechnung oder mit wartungsrechnung oder mit schlussrechnung aufhört. ist dem so, wird der Wert vor dem if ausgeben wenn nicht kommt die nächste prüfung hinter dem else
es können bilibig viele verschachtelungen vorgenommen werden.