Also in meiner Datei, in der letzten Zeile steht das :
2020-09-26/8-Pin Kabel/13.1
Bei tkinter Eingabe in Float
Du sitzt doch vor einer Programmiersprache.
Schau dir doch an, was in den einzelnen Zeilen steht:
Und ich bin mir ziemlich sicher, dass die letzte Zeile leer ist.
Nach der 13.1 muss ja kein Leerzeichen kommen, sondern ein Zeilenumbruch.
Und in der Zeile danach kommt bestimmt auch noch einer.
Schau dir doch an, was in den einzelnen Zeilen steht:
Code: Alles auswählen
with open("Butterbrot.txt") as lines:
for line_number, line in enumerate(lines):
print(f"Zeile {line_number}: {repr(line)}")
Nach der 13.1 muss ja kein Leerzeichen kommen, sondern ein Zeilenumbruch.
Und in der Zeile danach kommt bestimmt auch noch einer.
Zuletzt geändert von sparrow am Freitag 23. Oktober 2020, 10:48, insgesamt 1-mal geändert.
Bei mir wird dann folgende Ausgabe erzeugt, auch wenn was ganz anderes raus kommt, vom Datum her, was in der Datei steht:
Code: Alles auswählen
Zeile0: '\n'
Zeile1: '2020-10-23/<function Grund at 0x000001F80C67ED30>/\n'
Zeile2: '2020-10-23/<function Grund at 0x0000020373A7ED30>/\n'
Zeile3: '2020-10-23/<function Grund at 0x0000022CE0FBED30>/\n'
Zeile4: '2020-10-23//\n'
Zeile5: '2020-10-23//\n'
Zeile6: '2020-10-23//\n'
Zeile7: '2020-10-23//\n'
Zeile8: '2020-10-23//'
Tjoah, dann sind wir jetzt beim Urschleim angekommen.
Das ist das, was du einliest. Und du siehst ja selbst, wie die letzte Zeile aussieht. Rechts vom letzten / steht nichts.
Warum die Datei, die du dort einliest, so aussieht und nicht wie du dir das denkst? Offensichtlich liest du eine andere Datei ein als du vermutest.
Das ist das, was du einliest. Und du siehst ja selbst, wie die letzte Zeile aussieht. Rechts vom letzten / steht nichts.
Warum die Datei, die du dort einliest, so aussieht und nicht wie du dir das denkst? Offensichtlich liest du eine andere Datei ein als du vermutest.
Eigentlich die richtige Datei, 99,9% sicher... Jetzt verstehe ich aber auch die Ausgabe, aber ich habe leider noch keine Ahnung wie ich das beheben kann
...
In der letzten Zeile, nach dem / soll doch kein \!n stehen oder? Sonst wäre die letzte Zeile ja wirklich leer

In der letzten Zeile, nach dem / soll doch kein \!n stehen oder? Sonst wäre die letzte Zeile ja wirklich leer
Code: Alles auswählen
2020-08-15/Amazon echo dot Ebay/85.45
2020-08-15/Denon Ebay/123.45
2020-08-22/Tomtom Ebay/126.15
2020-08-24/Wiedergefundenes Geld/131.15
2020-08-31/McQueen Ebay/221.15
2020-09-01/Taschengeld/241.15
2020-09-01/Adidas Schuhe ebay/253.15
2020-09-05/Glasfaser vs. Kupferkabel/258.15
2020-09-10/Llyod Schuhe Ebay/258.7
2020-09-13/Zwo asi 120mm/96.7
2020-09-13/Zwo Guidescope/16.7
2020-09-26/8-Pin Kabel/13.1
Das ist nicht die Datei, die Python liest.
Du sitzt doch vor einer Programmiersprache. Es gibt kein "zu 99,9% sicher". Es gibt 100% sicher, weil du das jederzeit überprüfen kannst. Das Ergebnis entspricht nicht dem, was du erwartest? Dann musst du herausfinden, woran das liegt.
Du hast vorher gedacht, du kennst den Inhalt der Datei, die gelesen wird. Da wissen wir jetzt: den kennst du nicht.
Nun musst du herausfinden, welche Datei da eingelesen wird. Und dann musst du dir das halt anzeigen lassen.
Du sitzt doch vor einer Programmiersprache. Es gibt kein "zu 99,9% sicher". Es gibt 100% sicher, weil du das jederzeit überprüfen kannst. Das Ergebnis entspricht nicht dem, was du erwartest? Dann musst du herausfinden, woran das liegt.
Du hast vorher gedacht, du kennst den Inhalt der Datei, die gelesen wird. Da wissen wir jetzt: den kennst du nicht.
Nun musst du herausfinden, welche Datei da eingelesen wird. Und dann musst du dir das halt anzeigen lassen.
Code: Alles auswählen
from pathlib import Path
filepath = Path("Butterbrot.txt")
print(f"Reading file: {filepath.absolute()}")
with open(filepath) as lines:
for line_number, line in enumerate(lines):
print(f"Zeile {line_number}: {repr(line)}")
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@rennmaus: Jede Zeile sollte mit einem Zeilenende-Zeichen abgeschlossen werden, auch die letzte. Und die Daten sehen mir so aus, als sollte man da nicht selbst ein Format erfinden sondern CSV verwenden. Denn wenn die zweite Spalte Freitext ist, dann kann da ja auch das Trennzeichen drin vorkommen. Um so etwas will man sich nicht selbst kümmern müssen wenn es dafür schon standardisierte Formate und fertige Module für gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Wow, das hätte ich wirklich nicht gedacht, es war wirklich die falsche Datei, hier jetzt die richtige Ausgabe:
Code: Alles auswählen
Zeile 0: '2020-08-15/Amazon echo dot Ebay/85.45\n'
Zeile 1: '2020-08-15/Denon Ebay/123.45\n'
Zeile 2: '2020-08-22/Tomtom Ebay/126.15\n'
Zeile 3: '2020-08-24/Wiedergefundenes Geld/131.15\n'
Zeile 4: '2020-08-31/McQueen Ebay/221.15\n'
Zeile 5: '2020-09-01/Taschengeld/241.15\n'
Zeile 6: '2020-09-01/Adidas Schuhe ebay/253.15\n'
Zeile 7: '2020-09-05/Glasfaser vs. Kupferkabel/258.15\n'
Zeile 8: '2020-09-10/Llyod Schuhe Ebay/258.7\n'
Zeile 9: '2020-09-13/Zwo asi 120mm/96.7\n'
Zeile 10: '2020-09-13/Zwo Guidescope/16.7\n'
Zeile 11: '2020-09-26/8-Pin Kabel/13.1'
Code: Alles auswählen
import tkinter
from datetime import date
from pathlib import Path
pfad=Path('C:/Users/chris/Desktop/PyChris/Butterbrot.txt')
aktuellesDatum = date.today()
root=tkinter.Tk()
e=tkinter.Entry(root)
global neu
neu=e.get()
global grund
grund=e.get()
def Neu():
neu=e.get()
neu=float(neu)
def Grund():
grund=e.get()
grund=str(grund)
def Beenden():
root.destroy()
e=tkinter.Entry(root)
e.pack()
b0=tkinter.Button(root, text="Beenden", command=Beenden)
b0.pack()
lb=tkinter.Label()
lb ["text"] = "Bitte Grund eingeben"
lb.pack()
b1=tkinter.Button(root, text="Abgeben", command=Grund)
b1.pack()
b=tkinter.Button(root, text="Abgeben", command=Neu)
b.pack()
filename=pfad
file=open(pfad, 'r')
lb["text"] = file.read()
with open(pfad) as lines:
for line in lines:
pass
alt = float(line.split("/",2)[-1])
neu+=alt
filename=pfad
file=open(pfad, 'a')
file.write("\n" + str(aktuellesDatum) + "/" + str(grund) + "/" + str(neu))
file.close()
root.mainloop()
Code: Alles auswählen
neu+=alt
@rennmaus: das `global´ hilft Dir an dieser Stelle absolut gar nichts.
Du hast noch nicht verinnerlicht, wie GUI-Programme arbeiten. Der Interpreter führt stumpf alle Befehle von oben nach unten aus. Bis er zu root.mainloop kommt, und erst innerhal des Mainloop kann der Nutzer was eingeben und es werden die Callbacks aufgerufen.
Was für einen Wert neu hat, kann man übrigens durch ein einfaches print vor neu+=alt herausfinden.
Du hast noch nicht verinnerlicht, wie GUI-Programme arbeiten. Der Interpreter führt stumpf alle Befehle von oben nach unten aus. Bis er zu root.mainloop kommt, und erst innerhal des Mainloop kann der Nutzer was eingeben und es werden die Callbacks aufgerufen.
Was für einen Wert neu hat, kann man übrigens durch ein einfaches print vor neu+=alt herausfinden.
Mann so langsam komme ich mir böd vor.... Wieso hat neu jetzt garkeinen wert?
EDIT: Wenn ich aber das Global wegglasse, und damit auch neu=e.get(), dann ist neu nicht mehr definiert... Ich bin ein einziges Fragezeichen

EDIT: Wenn ich aber das Global wegglasse, und damit auch neu=e.get(), dann ist neu nicht mehr definiert... Ich bin ein einziges Fragezeichen

