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.
Zahl um 1 erhöhen
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.
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.
Die Idee ist nicht alles.
Hier ist mein aktueller Versuch: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.
Code: Alles auswählen
number = 0
zahl = number + 1
shoe_id = str(zahl)Die Idee ist nicht alles.
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.
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.
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])
