Seite 1 von 1

Datensätze verändern/bearbeiten

Verfasst: Sonntag 9. Februar 2020, 19:28
von KRM
Guten Abend zusammen! :)

Bin absolute Anfängerin in Sachen Python und SQL. Habe eine Datenbank erhalten, deren Datensätze ich nun bearbeiten soll.
Die Datenbank wurde nicht sauber gepflegt, sodass in einer Zelle keine reinen numerischen Werte stehen, sondern ein Mix aus zwei Werten wie "250 / 400" oder "250 / * " mit einem Sternchen gefüllt sind. Ich soll nun diese Werte trennen und in zwei verschiedene Spalten stecken, sprich der Wert 250 soll in Spalte 1 und Wert 400 in Spalte 2 stehen, der / oder * soll wegfallen. Jedoch habe ich keine Ahnung wie ich das anstellen soll? :shock:
Mir wurde der Tipp gegeben, dies mit Regex eventuell zu lösen, jedoch hat das nur noch mehr Fragezeichen hervorgebracht? :?: :?: :?:

Nun meine Fragen an euch:
1. Ist das mit Regex machbar? Wie würde denn der Code dafür bspw. aussehen? Da Regex sehr schwer verständlich für mich ist :(
2. Gibt es auch eine andere Möglichkeit, die Datensätze zu bearbeiten? Habe nur lauter SQL Befehle gefunden, in denen Datenbanken, Tabellen etc erstellt werden können, jedoch deren Werte direkt so voneinander getrennt zu werden leider nicht.

Ich wäre über jede Hilfe sehr dankbar!
Viele Grüße
KRM :)

Re: Datensätze verändern/bearbeiten

Verfasst: Sonntag 9. Februar 2020, 19:39
von Sirius3
Welches Datenbanksystem benutzt Du? Fast alle können einfache Stringoperationen direkt durchführen. Was soll denn statt `*` in der zweiten Spalte stehen?

Re: Datensätze verändern/bearbeiten

Verfasst: Montag 10. Februar 2020, 12:35
von KRM
Ich benutze DB Browser SQLite. Anstelle des '*' soll kein Wert in die zweite Spalte übertragen werden.

Re: Datensätze verändern/bearbeiten

Verfasst: Montag 10. Februar 2020, 12:40
von __deets__
Ich wuerde mir dann eine Funktion schreiben, die einen Wert nimmt, und die nach bestem Wissen und Gewissen in die neuen Werte ueberfuehrt, und die zurueck gibt. Damit kannst du erstmal pruefen, ob das alles so seine Richtigkeit hat, bevor du die tatsaechliche Konvertierung machst.

Code: Alles auswählen

def int_or_none(v):
    try:
        return int(v)
    except:
        return None

def process_value(value):
    # die Zuweisung an exakt zwei Werte ist gewollt, um einen Fehler
    # zu bekommen, wenn es mehr sind - also zB "100 /*/ 200" oder so.
    left, right = [int_or_none(v) for v in in value.split("/")]
    return left, right