Sfoglia il codice sorgente

'nnyverter.py' ändern

ChatGPT Format
7,49t neue Spalte
tsi 1 anno fa
parent
commit
3e0e00327f
1 ha cambiato i file con 112 aggiunte e 72 eliminazioni
  1. 112 72
      nnyverter.py

+ 112 - 72
nnyverter.py

@@ -1,92 +1,132 @@
+import os
+import random
+import re
+import csv
+import glob
 from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
 from pdfminer.converter import TextConverter
 from pdfminer.layout import LAParams
 from pdfminer.pdfpage import PDFPage
 from io import StringIO
-import re
-import csv
-import glob, os, random
 
+# Random quotes for the day
+lines = [
+    "Wenn der Hahn kräht auf dem Mist, wird das Wetter besser oder es bleibt, wie es ist.",
+    "Ich glaub, mein Schwein pfeift!",
+    "Deine Mutter hat angerufen: Sie sagt, du kanns nix!",
+    "Schade, dass am Ende des Geldes noch so viel Monat übrig ist!",
+    "Der frühe Vogel kann mich mal.",
+    "Wer andern eine Bratwurst brät, der hat ein Bratwurstbratgerät.",
+    "So! sprach der Floh und setzte sich aufs Klo!",
+    "Rettet die Bäume! Esst mehr Biber!",
+    "Am Wochenende bin ich ein Mofa. Halb Mensch, halb Sofa.",
+    "Früher war ich unentschlossen, jetzt bin ich mir da nicht mehr so sicher...",
+    "Schon komisch – auf den ältesten Fotos sieht man am jüngsten aus.",
+    "Ich habe keine Lösung, aber ich bewundere das Problem!",
+    "Auch ein Traumjob berechtigt nicht zum Schlaf während der Arbeitszeit.",
+    "Ich bin nicht dumm, die anderen verstehen nur meine Logik nicht.",
+    "Das einzige, was mich hier noch hält, ist die Erdanziehung!",
+    "Arbeit hat noch niemanden umgebracht, aber ich will kein Risiko eingehen.",
+    "Die Eselsbrücke ist die ideale Verbindung zwischen zwei Gedächtnislücken.",
+    "Tipps für einen flachen Bauch: Nur flache Sachen essen! Zum Beispiel Schokoladentafeln und Pizza.",
+    "Ich bin froh, dass ich mein Essen nicht selbst jagen muss. Ich wüsste auch gar nicht, wo Pizzen überhaupt leben.",
+    "Ich faulenze nicht - ich arbeite so schnell, dass ich immer fertig bin.",
+    "Als Nacktschläfer hat man es nicht leicht im Büro.",
+    "Heute Nacht von der Arbeit geträumt. Werde dafür fünf Überstunden abrechnen.",
+    "Kapiervorgang abgebrochen.",
+    "Mein Job ist so geheim, dass nicht mal ich weiß, was ich hier mache",
+    "Kuchen im Büro ist wie Raubtierfütterung im Zoo"
+]
 
-lines = ["Wenn der Hahn kräht auf dem Mist, wird das Wetter besser oder es bleibt, wie es ist.", "Ich glaub, mein Schwein pfeift!", "Deine Mutter hat angerufen: Sie sagt, du kanns nix!", "Schade, dass am Ende des Geldes noch so viel Monat übrig ist!", "Der frühe Vogel kann mich mal.", "Wer andern eine Bratwurst brät, der hat ein Bratwurstbratgerät.", "So! sprach der Floh und setzte sich aufs Klo!", "Rettet die Bäume! Esst mehr Biber!", "Am Wochenende bin ich ein Mofa. Halb Mensch, halb Sofa.", "Früher war ich unentschlossen, jetzt bin ich mir da nicht mehr so sicher...", "Schon komisch – auf den ältesten Fotos sieht man am jüngsten aus.", "Schon komisch – auf den ältesten Fotos sieht man am jüngsten aus.", "Ich habe keine Lösung, aber ich bewundere das Problem!", "Auch ein Traumjob berechtigt nicht zum Schlaf während der Arbeitszeit.", "Ich bin nicht dumm, die anderen verstehen nur meine Logik nicht.", "Das einzige, was mich hier noch hält, ist die Erdanziehung!", "Arbeit hat noch niemanden umgebracht, aber ich will kein Risiko eingehen.", "Die Eselsbrücke ist die ideale Verbindung zwischen zwei Gedächtnislücken.", "Tipps für einen flachen Bauch: Nur flache Sachen essen! Zum Beispiel Schokoladentafeln und Pizza.", "Ich bin froh, dass ich mein Essen nicht selbst jagen muss. Ich wüsste auch gar nicht, wo Pizzen überhaupt leben.", "Ich faulenze nicht - ich arbeite so schnell, dass ich immer fertig bin.", "Als Nacktschläfer hat man es nicht leicht im Büro.", "Heute Nacht von der Arbeit geträumt. Werde dafür fünf Überstunden abrechnen.", "Kapiervorgang abgebrochen.", "Mein Job ist so geheim, dass nicht mal ich weiß, was ich hier mache", "Kuchen im Büro ist wie Raubtierfütterung im Zoo"]
+# Regular expression to match the required data
+regex = r"^Tour Nr:\n\n(\d*)\n\nAbfahrt:.*?(?!(StellPl.|StellPl))\nFahrzeugTyp:\s(.*?)\nR-Tour.*?\nMaut.*?\nEmission.*?^(\d*(,\d*)?|0)\s(?:km|KM)$"
 
+# Function to convert PDF to text
 def convert_pdf_to_txt(path):
     rsrcmgr = PDFResourceManager()
     retstr = StringIO()
-    codec = 'utf-8'
     laparams = LAParams()
-    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
-    fp = open(path, 'rb')
-    interpreter = PDFPageInterpreter(rsrcmgr, device)
-    password = ""
-    maxpages = 0
-    caching = True
-    pagenos=set()
-
-    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
-        interpreter.process_page(page)
-
+    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
+    with open(path, 'rb') as fp:
+        interpreter = PDFPageInterpreter(rsrcmgr, device)
+        for page in PDFPage.get_pages(fp, check_extractable=True):
+            interpreter.process_page(page)
     text = retstr.getvalue()
-
-    fp.close()
     device.close()
     retstr.close()
     return text
 
-regex = r"^Tour Nr:\n\n(\d*)\n\nAbfahrt:.*?(?!(StellPl.|StellPl))\nFahrzeugTyp:\s(.*?)\nR-Tour.*?\nMaut.*?\nEmission.*?^(\d*(,\d*)?|0)\s(?:km|KM)$"
-
-total = 0.0
-total_15 = 0.0
-os.chdir("./")
-print("                                   _            ")
-print("  _ __  _ __  _   ___   _____ _ __| |_ ___ _ __ ")
-print(" | '_ \| '_ \| | | \ \ / / _ \ '__| __/ _ \ '__|")
-print(" | | | | | | | |_| |\ V /  __/ |  | ||  __/ |   ")
-print(" |_| |_|_| |_|\__, | \_/ \___|_|   \__\___|_|   ")
-print("              |___/                         ")
-print("                             Version 2023.1                 ")
-print("       moin")
-print("")
-print("Spruch des Tages:")
-print(random.choice(lines))
-print("")
-with open("ergebnis.csv", 'w', newline='') as csvfile:
-    spamwriter = csv.writer(csvfile, delimiter=';',
-                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
-
-    for file in glob.glob("*.pdf"):
-        daily = 0.0
-        daily_15 = 0.0
-        print("Beginne mit " + file + " alles guddes!")
-        spamwriter.writerow([str(file)])
-        out = convert_pdf_to_txt(file)
-        #file = open("testfile.txt","w",  encoding='utf-8') 
-        #file.write(out)
-        #file.close() 
-        matches = re.finditer(regex, out, re.MULTILINE | re.DOTALL)
+# Function to handle each match
+def handle_match(match, spamwriter):
+    tour_number = f"=\"{match.group(1)}\""
+    km = float(match.group(4).replace(",", "."))
+    vehicle_type = match.group(3).replace(",", ",")
+    
+    if vehicle_type == "Kran 21 t":
+        return 0, 0
+    
+    if vehicle_type in ["LKW 15 t", "LKW 12 t"]:
+        spamwriter.writerow([tour_number, 0, match.group(4).replace(",", ","), 0, vehicle_type])
+        return 0, km
+    
+    if vehicle_type in "LKW 7,49t":
+        spamwriter.writerow([tour_number, 0, 0, match.group(4).replace(",", ","), vehicle_type])
+        return km, 0
+    
+    spamwriter.writerow([tour_number, match.group(4).replace(",", ","), 0, 0, vehicle_type])
+    return km, 0
 
-        
+# Function to process a single PDF file
+def process_pdf(file, spamwriter):
+    daily = 0.0
+    daily_15 = 0.0
+    print(f"Beginne mit {file} alles guddes!")
+    spamwriter.writerow([file])
+    out = convert_pdf_to_txt(file)
+    matches = re.finditer(regex, out, re.MULTILINE | re.DOTALL)
+    
+    for matchNum, match in enumerate(matches, start=1):
+        #print(f"Match {matchNum} was found at {match.start()}-{match.end()}: {match.group()}")
+        km, km_15 = handle_match(match, spamwriter)
+        daily += km
+        daily_15 += km_15
+        print(f"Tour {matchNum}, {match.group(1)}, {match.group(3).replace(',', '.')}")
+    
+    print(daily)
+    spamwriter.writerow(["Gesamt (Tag)", f"=\"{round(daily, 2)}\""])
+    spamwriter.writerow(["Gesamt (12 t + 15 t) (Tag)", f"=\"{round(daily_15, 2)}\""])
+    spamwriter.writerow([])
+    return daily, daily_15
 
-        i = 1
+# Main script
+def main():
+    total = 0.0
+    total_15 = 0.0
+    os.chdir("./")
+    print("                                   _            ")
+    print("  _ __  _ __  _   ___   _____ _ __| |_ ___ _ __ ")
+    print(" | '_ \\| '_ \\| | | \\ \\ / / _ \\ '__| __/ _ \\ '__|")
+    print(" | | | | | | | |_| |\\ V /  __/ |  | ||  __/ |   ")
+    print(" |_| |_|_| |_|\\__, | \\_/ \\___|_|   \\__\\___|_|   ")
+    print("              |___/                         ")
+    print("                             Version 2024.2                 ")
+    print("       moin")
+    print("")
+    print("Spruch des Tages:")
+    print(random.choice(lines))
+    print("")
+    
+    with open("ergebnis.csv", 'w', newline='') as csvfile:
+        spamwriter = csv.writer(csvfile, delimiter=';', quotechar='|', quoting=csv.QUOTE_MINIMAL)
+        for file in glob.glob("*.pdf"):
+            try:
+                daily, daily_15 = process_pdf(file, spamwriter)
+                total += daily
+                total_15 += daily_15
+            except Exception as e:
+                print(f"Error processing {file}: {e}")
+        spamwriter.writerow(["Gesamt (Monat)", f"=\"{round(total, 2)}\""])
+        spamwriter.writerow(["Gesamt (12 t + 15 t) (Monat)", f"=\"{round(total_15, 2)}\""])
 
-        for matchNum, match in enumerate(matches, start=1):
-            ##print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
-            if match.group(3) == "Kran 21 t":
-                continue
-            if match.group(3) == "LKW 15 t":
-                spamwriter.writerow([str("=\"" + match.group(1) + "\"")] + [0] + [str(match.group(4)).replace(",",",")] + [str(match.group(3)).replace(",",",")])
-                daily_15 = daily_15 + float(match.group(4).replace(",","."))
-            else:
-                spamwriter.writerow([str("=\"" + match.group(1) + "\"")] + [str(match.group(4)).replace(",",",")] + [0] + [str(match.group(3)).replace(",",",")])
-                daily = daily + float(match.group(4).replace(",","."))
-            print ("Tour " + str(i) + "," + str(match.group(1)) + "," + str(match.group(3)).replace(",","."))
-            i = i+1
-        print(daily)
-        total = total + daily
-        total_15 = total_15 + daily_15
-        spamwriter.writerow(["Gesamt (Tag)"] + [str("=\"" + str(round(daily, 2)) + "\"")])
-        spamwriter.writerow(["Gesamt (15 t) (Tag)"] + [str("=\"" + str(round(daily_15, 2)) + "\"")])
-        spamwriter.writerow([])
-        print("ok")
-    spamwriter.writerow(["Gesamt (Monat)"] + [str("=\"" + str(round(total, 2)) + "\"")])
-    spamwriter.writerow(["Gesamt (15 t) (Monat)"] + [str("=\"" + str(round(total_15, 2)) + "\"")])
+if __name__ == "__main__":
+    main()