Zahl um 1 erhöhen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JGS-Coder
User
Beiträge: 8
Registriert: Donnerstag 19. November 2020, 08:26

Hey Leute,
ich schreibe aktuell ein Programm, wo ich mit einer csv Datei arbeite. Nun möchte ich jedes mal, wenn eine neue Zeile erstellt wird, dieser eine ID zuweisen. Die Zahl soll bei null beginnen und bei jedem neuen Eintrag um 1 erhöht werden und auch nach Neustart des Programms gespeichert bleiben. Also 1. Zeile = 0, 2. Zeile 2 = 1, usw.. Ich finde keine Lösung und wäre für eure Hilfe sehr dankbar. :D
Die Idee ist nicht alles.
Benutzeravatar
sparrow
User
Beiträge: 4516
Registriert: Freitag 17. April 2009, 10:28

Du weißt nicht, wie man den Wert einer Variable um 1 erhöht?!

Zeig doch mal, was du bisher tust.
JGS-Coder
User
Beiträge: 8
Registriert: Donnerstag 19. November 2020, 08:26

sparrow hat geschrieben: Freitag 4. Dezember 2020, 14:43 Du weißt nicht, wie man den Wert einer Variable um 1 erhöht?!

Zeig doch mal, was du bisher tust.
Hier ist mein aktueller Versuch:

Code: Alles auswählen

number = 0
zahl = number + 1 
shoe_id = str(zahl)
Allerdings ist die ID so jedes mal 1. Sie soll aber steigen.
Die Idee ist nicht alles.
Benutzeravatar
sparrow
User
Beiträge: 4516
Registriert: Freitag 17. April 2009, 10:28

Da schreibst du aber keine Zeilen in eine CSV-Datei.
Zuletzt geändert von sparrow am Freitag 4. Dezember 2020, 15:24, insgesamt 2-mal geändert.
JGS-Coder
User
Beiträge: 8
Registriert: Donnerstag 19. November 2020, 08:26

sparrow hat geschrieben: Freitag 4. Dezember 2020, 15:20 Da schreibst du aber keine Zeilen in eine CSV-Datei.

Code: Alles auswählen

try:
    d = open("daten.csv", "a")
except:
    print("Dateizugriff fehlgeschlagen")
    sys.exit(0)
    
def add_shoe():
    global marke, modell, datum, preis, size, since_price, shoe_id
    print("Welche Marke?")
    marke =input(">")
    print("Welcher Schuh und Colorway?")
    modell = input(">")
    print("Wann gekauft?")
    datum = input(">")
    print("Preis?")
    preis = input(">")
    print("Größe?")
    size = input(">")
    print("Sell für ...€/ Hold seit ...?")
    since_price = input(">")
    number = 0
    zahl = number + 1 
    shoe_id = str(zahl)
    add_to_list()

def add_to_list():
	li = [marke, modell, datum, preis, size, since_price, shoe_id]
	d.write(str(li[0]) + ";" + li[1]+ ";" + li[2]+ ";" + li[3]+ ";" + li[4]+ ";" + li[5]  + ";" + li[6] + "\n")
	d.close()
	print(modell + " wurde zur Tabelle hinzugefügt")
	print("")
Die Idee ist nicht alles.
Sirius3
User
Beiträge: 18241
Registriert: Sonntag 21. Oktober 2012, 17:20

Vergiss erstmal dass es global überhaupt gibt. Alles was eine Funktion braucht, bekommt sie über ihre Argumente.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene. Benutze niemals Tabs.
Strings stückelt man nicht mit + zusammen, sondern benutzt Formatstrings. Aber zum Schreiben von csv-Dateien benutzt man sowieso das csv-Modul.
Nackte excepts oder sys.exit haben in einem sauberen Programm nichts verloren. `d` ist ein sehr schlechter Name für ein Fileobjekt, weil es keine Aussagekraft hat. Außerdem ist es sehr schlecht, das Du global die Datei öffnest, aber irgendwo verschachtelt in einer Funktion wieder schließt.
Wenn Du eine eindeutige ID brauchst, dann mußt Du erst die Datei lesen, und nach der größten ID suchen.

Code: Alles auswählen

import csv

DATEN_FILENAME = "daten.csv"

def add_shoe():
    marke =input("Welche Marke?")
    modell = input("Welcher Schuh und Colorway?")
    datum = input("Wann gekauft?")
    preis = input("Preis?")
    size = input("Größe?")
    since_price = input("Sell für ...€/ Hold seit ...?")
    add_to_file(marke, modell, datum, preis, size, since_price)

def add_to_file(marke, modell, datum, preis, size, since_price):
    with open(DATEN_FILENAME, newline='\n') as lines:
        entries = csv.reader(lines)
        max_id = max(int(entry[-1]) for entry in entries)
    with open(DATEN_FILENAME, mode='a', newline='\n') as output:
        output_csv = csv.writer(output)
        output.csv.write([marke, modell, datum, preis, size, since_price, max_id+1])
Antworten