Programmieren mit ChatGPT

Dass AI in 2022 komplett durch die Decke gegangen ist, solltet ihr wahrscheinlich mitbekommen haben. Ich hatte mich auch ein wenig mit ChatGPT unterhalten und kam auf die Idee mir für zwei konkrete Probleme einfach Scripte schreiben zu lassen.

Zu meinem Erstaunen ging das wirklich gut. Die AI hat mir, weil ich ihr erzählt habe, dass ich mit einem Mac arbeite, Python-Scripte geschrieben. Ich habe ein grundlegendes Verständnis von Programmierung und kann Interfaces mit Javascript bauen, also konnte ich in etwa verstehen, was passiert. Ich habe aber noch nie Python gesehen und das war ein interessanter Einblick.

Und weil ich ein bisschen faul bin, lasse ich einfach ChatGPT erklären, was wir zusammen gemacht haben.

MoneyMoney Export anonymisieren

In dieser Interaktion haben wir ein Skript erstellt, das eine CSV-Datei mit Transaktionen einliest und dann eine neue CSV-Datei mit anonymisierten Daten erstellt. Das Skript hat dabei die Spalten „Datum“, „Name“ und „Betrag“ verwendet und die Spalte „Name“ in „Art“ umbenannt. Für positive Beträge in der Spalte „Betrag“ wurde der Wert in der Spalte „Art“ in „Support“ umbenannt, während negative Beträge entweder in „Serverkosten“ oder, falls das Wort „Deepl“ oder „mailjet“ im Wert der Spalte „Name“ enthalten war, in „Deepl“ bzw. „Mailjet“ umbenannt wurden.

Das Skript hat außerdem das Datum in das Format „YYYY-MM-DD“ konvertiert und den Trennzeichen für Nachkommastellen in der Spalte „Betrag“ von einem Punkt auf ein Komma geändert. Am Ende wurde die Eingabedatei gelöscht.

import csv
import datetime
import re
import os

# Open the input file
with open("norden_social.csv", "r") as f:
    reader = csv.reader(f, delimiter=";")
    
    # Read the headers
    headers = next(reader)

    # Determine the column numbers for the desired columns
    date_column = headers.index("Datum")
    purpose_column = headers.index("Name")
    amount_column = headers.index("Betrag")

    # Open the output file
    with open("data.csv", "w", newline="") as g:
        writer = csv.writer(g, delimiter=';')

        # Write the headers
        writer.writerow(["Datum", "Art", "Betrag"])

        # Iterate through all rows
        for row in reader:

            # Convert the value for "Betrag" to a floating point number
            amount = row[amount_column]
            amount = amount.replace(",", ".")
            amount = float(amount)

            # Anonymize the value for "Art"
            if amount > 0:
                art = "Support"
            else:
                purpose = row[purpose_column]
                if re.search(r"\bDeepl\b", purpose):
                    art = "Deepl"
                elif re.search(r"\bmailjet\b", purpose):
                    art = "Mailjet"
                else:
                    art = "Serverkosten"

            # Convert the value for "Datum" to the desired format
            date = row[date_column]
            date = datetime.datetime.strptime(date, "%d.%m.%Y").strftime("%Y-%m-%d")

            # Convert amount to a string
            amount = row[amount_column]
            amount = str(amount)
            amount = amount.replace(".", ",")

            # Write the row
            writer.writerow([date, art, amount])

# Delete the input file
os.remove("norden_social.csv")

Link zum Code auf Github

Markdown Dateien zusammenführen

In dieser Unterhaltung haben wir ein Python-Skript erstellt, das alle Markdown-Dateien in allen Unterordnern durchsucht, nach Datum sortiert und in eine einzige Markdown-Datei zusammenführt. Das Datum wird aus dem Dateinamen, der im Format YYYY-MM-DD vorliegt, extrahiert. Der Dateiname wird als Überschrift am Anfang jeder Datei geschrieben und der Inhalt jeder Datei wird in die zusammengeführte Datei geschrieben. Eckige Klammern, die Wörter umgeben, wie [[Beispielwort]], werden aus dem Inhalt entfernt.

Dieses Skript ist nützlich, wenn man viele Markdown-Dateien hat, die zu einem bestimmten Thema gehören und diese zusammenführen möchte, ohne sie manuell kopieren und einfügen zu müssen. Indem man das Datum aus dem Dateinamen extrahiert und die Dateien nach Datum sortiert, werden die Dateien auch in chronologischer Reihenfolge zusammengeführt.

Um das Skript auszuführen, muss man es in einem Ordner speichern, in dem sich die Markdown-Dateien befinden, und es dann ausführen. Es wird eine neue Datei mit dem Namen „combined.md“ erstellt, in der alle Markdown-Dateien zusammengeführt sind.

import os
import re

# Regex to extract the date from the filename
date_regex = re.compile(r'(\d{4})-(\d{2})-(\d{2})')

# List of Markdown files, sorted by date
markdown_files = []

# Search all subfolders
for root, dirs, files in os.walk('.'):
    for file in files:
        if file.endswith('.md'):
            # Add the file to the list
            full_path = os.path.join(root, file)
            date_match = date_regex.search(file)
            if date_match:
                year, month, day = map(int, date_match.groups())
                date = (year, month, day)
            else:
                date = None
            markdown_files.append((date, full_path))

# Sort the list by date
markdown_files.sort(key=lambda x: x[0])

# Open the target file in write mode ('w')
with open('combined.md', 'w') as outfile:
    # Write all files to the target file
    for date, file in markdown_files:
        with open(file, 'r') as infile:
            # Read the content of the file
            content = infile.read()
            # Remove the square brackets from words surrounded by them
            content = re.sub(r'\[\[(.+?)\]\]', r'\1', content)
            # Write the filename as a header
            filename = os.path.splitext(os.path.basename(file))[0]
            outfile.write(f'# {filename}\n')
            # Write the content of the file
            outfile.write(content)
            outfile.write('\n')

Link zum Code auf Github