| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 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
- # 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"
- ]
- # 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()
- laparams = LAParams()
- 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()
- device.close()
- retstr.close()
- return text
- # 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
- # 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)}\""])
- if __name__ == "__main__":
- main()
|