Servus,
Mein, für mich großes, Projekt ist momentan im Stillstand. Ich habe eine To-do-list programmiert, in die man seine zu erledigenden Sachen reinschreibt. alles schön und gut blos werden die Sachen ja nur kurzeitig im Arbeitsspeicher gespeichert, sobald ich das Programm schließe ist alles wieder weg. Deshalb würde ich gerne wissen wie man in Python 3 eine .txt Datei mit diesen eingetragenen "Issues" beschreiben und wieder einlesen kann. Es wäre nett wenn ihr mir das an einem simplen Beisiel erklärt. Zum Beispiel ein Programm in das meine eine Zahl eingibt und diese dann einfach in einer Textdatei gespeichert wird.
Vielen Dank!
Datei schreiben und lesen
Hallo.
Ist ja nicht so, dass es nicht im Grundlagentutorial stehen würde
Unter Umständen bietet sich aber auch das SQLite-Modul an, dann musst du dich nicht selbst um mögliche Sonderfälle kümmern (Zeilenumbruch in einer Todo-Beschreibung, Zusatzinformationen zu einem Todo, etc.).
Ist ja nicht so, dass es nicht im Grundlagentutorial stehen würde
Das Leben ist wie ein Tennisball.
Ist das nicht für Python 2?EyDu hat geschrieben:Hallo.
Ist ja nicht so, dass es nicht im Grundlagentutorial stehen würdeUnter Umständen bietet sich aber auch das SQLite-Modul an, dann musst du dich nicht selbst um mögliche Sonderfälle kümmern (Zeilenumbruch in einer Todo-Beschreibung, Zusatzinformationen zu einem Todo, etc.).
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dateihandling sollte in jedem guten Tutorial beschrieben werden! Welches nutzt Du denn zum Lernen?
Ich würde Dir raten, Deine Daten im JSON-Format zu serialisieren. Dafür gibt es das Modul ``json`` in der Standard-Lib, welches einfach zu benutzen ist. Das Format kannst Du in einem Texteditor lesen und bearbeiten.
Da Du Deine "ToDos" ja schon in irgend einer Form von Datenstruktur vorliegen hast, sollte das Hinzufügen dieser Funktionalität recht einfach sein
Ich würde Dir raten, Deine Daten im JSON-Format zu serialisieren. Dafür gibt es das Modul ``json`` in der Standard-Lib, welches einfach zu benutzen ist. Das Format kannst Du in einem Texteditor lesen und bearbeiten.
Da Du Deine "ToDos" ja schon in irgend einer Form von Datenstruktur vorliegen hast, sollte das Hinzufügen dieser Funktionalität recht einfach sein
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
anogayales
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
-
BlackJack
Reading and Writing Files im Tutorial in der Python-Dokumentation hast Du schon durchgearbeitet? Interessant dürfte dort auch der Abschnitt Saving structured data with json sein.
Edit: Zu langsam.
Edit: Zu langsam.
Ich benutze "Programming in Python 3" von Mark Summerfield.Hyperion hat geschrieben:Dateihandling sollte in jedem guten Tutorial beschrieben werden! Welches nutzt Du denn zum Lernen?
Ich würde Dir raten, Deine Daten im JSON-Format zu serialisieren. Dafür gibt es das Modul ``json`` in der Standard-Lib, welches einfach zu benutzen ist. Das Format kannst Du in einem Texteditor lesen und bearbeiten.
Da Du Deine "ToDos" ja schon in irgend einer Form von Datenstruktur vorliegen hast, sollte das Hinzufügen dieser Funktionalität recht einfach sein
Kennst du ein besseres Buch?
Ok danke werd ich gleich mal probieren
Ich habe das jetzt probiert, bekomme jedoch keine ausgabe..
Code: Alles auswählen
#!/usr/bin/python3
import json
json.dumps([1, "simple", "list"])
Könnte daran liegen, dass du das Ergebnis von ``json.dumps`` gar nicht ausgibst
Wenn du die Daten mit Json in einer Datei abspeichern wilst, dann solltest du auch besser direkt den Weg über ``json.dump`` gehen, dort kannst du zusätzlich ein Dateiobjekt übergeben.
Das Leben ist wie ein Tennisball.
ich mache das so :
f = open("C:\\important\\Databank.txt","w") # w für write
eingabe = input()
f.write(eingabe)
f.write(" ")
eingabe2 = input()
f.write(eingabe2)
f.close()
das speichert meine daten in dem von mir ausgewählten pfad ab die f.write(" ") zeile ist zum unterscheiden von key und value. Um die Daten dann wieder reinzuladen mache ich das so:
d = {} #dictionary klammern
f =open("C:\\important\\Databank.txt","r") # pfad und read file
for line in f:
(key, val) = line.split() # unterscheiden von key und value
d[key] = val # zuordnung
f.close()
du brauchst eig nur die f =open("C:\\important\\Databank.txt","r") zeile zum reinladen der rest ist dafür gedacht wenn du die daten etwas zuordnen willst wenn du die einfach nur einlesen willst reicht die zeile.
f = open("C:\\important\\Databank.txt","w") # w für write
eingabe = input()
f.write(eingabe)
f.write(" ")
eingabe2 = input()
f.write(eingabe2)
f.close()
das speichert meine daten in dem von mir ausgewählten pfad ab die f.write(" ") zeile ist zum unterscheiden von key und value. Um die Daten dann wieder reinzuladen mache ich das so:
d = {} #dictionary klammern
f =open("C:\\important\\Databank.txt","r") # pfad und read file
for line in f:
(key, val) = line.split() # unterscheiden von key und value
d[key] = val # zuordnung
f.close()
du brauchst eig nur die f =open("C:\\important\\Databank.txt","r") zeile zum reinladen der rest ist dafür gedacht wenn du die daten etwas zuordnen willst wenn du die einfach nur einlesen willst reicht die zeile.
@zar1: es gibt etliche Pakete in der Standardbibliothek um solche Daten in einem vernünftigen Format zu speichern, da brauchst Du nicht noch etwas eigenes, fehleranfälliges zu schreiben. Je nach Vorlieben gibt es ConfigParser, csv, json, Deine Lösung macht Probleme, wenn jemand Leerzeichen eingibt.
Du solltest Dich hier im Forum übrigens mal nach dem Code-Knopf suchen.
Du solltest Dich hier im Forum übrigens mal nach dem Code-Knopf suchen.
@Sirius3
zuerst ist das was ich gepostet habe nicht fehleranfällig zumindest funktioniert es bei mir:)
zweitens verstehe ich ncith warum an sich durch ein modul arbeiten muss wenn die lösung in python ohne module schon vorgegeben ist.
und ich rate dir den ganzen quellcode zu lesen den dieses "Leerzeichen" wurde nur zur Abgrenzung gemach tund hat somit keinen weiteren Wert siehe:
for line in f:
(key, val) = line.split()
aber ist nur meine Lösung und es gibt sicher andere bzw. bessere
zuerst ist das was ich gepostet habe nicht fehleranfällig zumindest funktioniert es bei mir:)
zweitens verstehe ich ncith warum an sich durch ein modul arbeiten muss wenn die lösung in python ohne module schon vorgegeben ist.
und ich rate dir den ganzen quellcode zu lesen den dieses "Leerzeichen" wurde nur zur Abgrenzung gemach tund hat somit keinen weiteren Wert siehe:
for line in f:
(key, val) = line.split()
aber ist nur meine Lösung und es gibt sicher andere bzw. bessere
@zar1: ich kann lesen
Teste selbst:
Teste selbst:
Code: Alles auswählen
>>> eingabe = input()
bla bla
>>> eingabe2 = input()
foo foo
>>> with open('datei.txt', 'w') as output:
... output.write("{} {}".format(eingabe, eingabe2))
...
15
>>> d = {}
>>> with open('datei.txt') as lines:
... for line in lines:
... (key, val) = line.split()
... d[key] = val
...
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
ValueError: too many values to unpack (expected 2)
>>> -
BlackJack
@zar1: Ich denke Du hast es noch nicht verstanden, es liegt nicht an der Anzahl der Elemente, auch Sirius3 hat da nur *zwei* eingegeben, sondern das bei Deinem Format das Trennzeichen selbst nicht in den Elementen vorkommen darf. Du musst das mindestens vor dem schreiben verhindern, am besten schon bei der Eingabe, sonst ist Dein Programm eben doch fehleranfällig.
Ok das mit dem einschreiben hat geklappt!
Aber wie kann ich den Inhalt der Datei einzeigen lassen?
so müsste der Code doch anfangen:
Code: Alles auswählen
#!/usr/bin/python3
f = open("f.txt","w")
eingabe = input()
f.write(eingabe)
f.close()
so müsste der Code doch anfangen:
Code: Alles auswählen
f = open("f.txt", encoding="utf8")
das ist leider für Python 2 habe Python 3/me hat geschrieben:Wenn man nach der durchaus recht informativen offiziellen Dokumentation geht, dann könnte man readline verwenden.nfehren hat geschrieben:Aber wie kann ich den Inhalt der Datei einzeigen lassen?
Edit:
Habe eine gute Doku gefunden
http://www.tutorialspoint.com/python/file_readline.htm
mein Code sieht jetzt so aus:
Code: Alles auswählen
f = open("f.txt","w")
eingabe = input()
f.write(eingabe)
f.close()
f = open("f.txt","r", encoding="utf8")
line = f.readline()
print("Read Line: %s" % (line))
der Unterschied zwischen 2 und 3 ist die 2 und die 3 in der URL 
http://docs.python.org/3/library/stdtyp ... e.readline
http://docs.python.org/3/library/stdtyp ... e.readline
