Ich hoffe ich bin in diesem Thread richtig. Ich bin seit ein paar Wochen dabei Python zu lernen. Nun wollte ich mir zum Üben eine ToDo-Liste erstellen, welche in eine CSV-Datei ausgelagert ist. Die einzelnen ToDo's habe ich mittels einer ToDo-Klasse angelegt, welche in einem Code ausgelagert ist. Ich habe es geschafft, dass eine Todo angelegt werden kann sowie, dass alle ToDo's bzw. welche bis zu einem Stichtag angezeigt werden können. Beim Punkt den Text einer ToDo anhand seiner ID zu ändern hänge ich allerdings. Meiner Meinung nach müsste ich die CSV in reinladen, im Memory bearbeiten und dann die bearbeitete Version über die alte CSV speichern. Dies funktioniert jedoch bei mir nicht. Könnt Ihr mir hierbei helfen?
Danke für eure Unterstützung.
mfg
Bananradrama
Code ToDo-Klasse:
Code: Alles auswählen
class todoLine:
def __init__(self, ID, text, actualDate, deadline, status):
self.ID = ID #automatische ID
self.text = text #Freitext für TODO
self.actualDate = actualDate #Aktualdatum damit Tage berechnet werden können
self.deadline = deadline #Deadline Datum
self.status = status #offen/erledigt
Code: Alles auswählen
import todo_data
import csv
import sys
import datetime
import pandas as pd
from todo_data import todoLine
#functions
def load_csv(path_to_todo):
with open (path_to_todo) as todo_file:
reader = csv.reader(todo_file, delimiter = ';')
for line in reader:
ToDo.append(todoLine(line[0], line[1], line[2], line[3], line[4]))
year, month, day = map(int, line[3].split('-'))
line[3] = datetime.date(year, month, day)
# Eingabeaufforderung
def print_menu():
print("")
print("")
print("##############")
print("ToDo Liste deluxe")
print("##############")
print("neu - Anlegen von ToDo's")
print("alle - Ausgabe aller ToDo's")
print("bis - Ausgabe von ToDo's bis zu einem Stichtag")
print("aendern - Ändere eine deiner ToDo's")
print("erledigt - setze eine ToDo auf erledigt")
print("quit - Beenden der Applikation")
print("---")
#Funktion Anlegen von ToDo's
#-Einlesen - erledigt mit Funktion zu Beginn des Programmes
#-neue ToDo anhängen
def anlegen_ToDo():
neue_ToDo = [input("Bitte geben Sie eine noch nicht vorhandene Zahl als ID ein: "), input("Bitte geben Sie den Namen Ihrer ToDo ein:"), input("Bitte geben Sie das aktuelle Datum im Format YYYY-MM-DD ein: "), input ("Bitte geben Sie eine Deadline im Format YYY-MM-DD ein: "), input ("Bitte geben Sie offen oder erledigt ein: ")]
with open('todo.csv', 'a', newline='') as todo_file:
writer = csv.writer(todo_file, delimiter = ';')
writer.writerow(neue_ToDo)
#Funktion Ausgabe aller ToDo's
def anzeigen_ToDo():
with open('todo.csv', 'r') as todo_file:
reader = csv.reader(todo_file, delimiter = ';')
for line in reader:
print(line)
#Funktion Ausgabe aller ToDo's bis zu einem Tag
def anzeigen_Stichtag(deadline):
for cur_ToDo in ToDo:
year, month, day = map(int, cur_ToDo.deadline.split('-'))
cur_ToDo.deadline = datetime.date(year, month, day)
if cur_ToDo.deadline <= deadline:
print(str(cur_ToDo.ID) + " " + str(cur_ToDo.text) + " " + str(cur_ToDo.status))
#Funktion Ändern ToDo auf Basis ID
def aendern_ToDo_Text(Id):
with open('todo.csv', 'r') as todo_file:
reader = csv.reader(todo_file, delimiter = ';')
for line in reader:
print(line)
if Id == line.ID:
line.text = input("Bitte geben Sie eine neue Beschreibung ein: ")
# todo_file = csv.reader(open('todo.csv'), delimiter = ';')
#lines = list(todo_file)
#for line in lines:
#if cur_ID == Id:
#todoLine.text = input("Bitte geben Sie eine neue Beschreibung ein:")
#writer = csv.writer(open("todo.csv")):
# writer = csv.writer(reader, delimiter = ';')
# writer.writerows(todo_file)
#Funktion ToDo als erledigt markieren
#tbd
# main program
ToDo = []
load_csv("todo.csv")
while True:
print_menu()
user_command = input("Bitte geben Sie einen Befehl ein:")
if user_command == "neu":
anlegen_ToDo()
elif user_command == "alle":
anzeigen_ToDo()
elif user_command == "bis":
deadline1 = input("Bitte geben Sie die gewünschte Deadline ein:")
year, month, day = map(int, deadline1.split('-'))
deadline1 = datetime.date(year, month, day)
anzeigen_Stichtag(deadline1)
elif user_command == "aendern":
ID_aendern = input("Bitte geben Sie die ID ein :")
aendern_ToDo_Text(ID_aendern)
elif user_command == "erledigt":
<tbd>
elif user_command == "quit":
break
else:
print("Falsche Eingabe")