Seite 1 von 1
Zahl um 1 erhöhen
Verfasst: Freitag 4. Dezember 2020, 14:37
von JGS-Coder
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.

Re: Zahl um 1 erhöhen
Verfasst: Freitag 4. Dezember 2020, 14:43
von sparrow
Du weißt nicht, wie man den Wert einer Variable um 1 erhöht?!
Zeig doch mal, was du bisher tust.
Re: Zahl um 1 erhöhen
Verfasst: Freitag 4. Dezember 2020, 15:19
von JGS-Coder
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:
Allerdings ist die ID so jedes mal 1. Sie soll aber steigen.
Re: Zahl um 1 erhöhen
Verfasst: Freitag 4. Dezember 2020, 15:20
von sparrow
Da schreibst du aber keine Zeilen in eine CSV-Datei.
Re: Zahl um 1 erhöhen
Verfasst: Freitag 4. Dezember 2020, 15:23
von JGS-Coder
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("")
Re: Zahl um 1 erhöhen
Verfasst: Freitag 4. Dezember 2020, 15:35
von Sirius3
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])