Dokumentarten bestimmen am Dateinamen
Problembeschreibung
Oftmals wird im Dateinamen der Dokumententyp angegeben. Manchmal auch am Ende des Dateinamens. Eine Weitere Schwierigkeit kann sein, dass dabei auch unterschiedliche Bezeichnungen verwendet wurden.
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 ist variabel. Ein splitting nach starren Regeln funktioniert nicht
- Der Typ steht am Ende des Dateinamnes
- Der Typ ist nicht einheitlich vergeben
Um richtige Werte zu bekommen, wird eine verschachteltet IF Abfrage verwendet. Die Anlayse wird auf das Ende des Strings angewendet.
Lösung
Der Befehl unterscheidert zwischen
- Rechnungsausgang
- Angebot
- Gutschrift
- Auftragsbestätigung
Alle Andere Dokumente werden als
- nicht zugeordnet
abgelegt.
Folgender String ist die fertig Lösung. Die einzelnen Elemente werden unten erklärt.
'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.