Seite 1 von 2

Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:42
von nfehren
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!

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:53
von EyDu
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.).

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:54
von nfehren
EyDu hat geschrieben: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 das nicht für Python 2?

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:55
von Hyperion
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 :-)

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:56
von anogayales
http://docs.python.org/3/tutorial/input ... ting-files

Einfach die 2 in eine 3 ändern in der URL. 8)

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:57
von 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. :(

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:58
von nfehren
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 :-)
Ich benutze "Programming in Python 3" von Mark Summerfield.
Kennst du ein besseres Buch?

Ok danke werd ich gleich mal probieren :)

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 10:59
von nfehren
Danke für die vielen Antworten ich arbeite mich jetzt durch die Links :P

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 12:15
von nfehren
Ich habe das jetzt probiert, bekomme jedoch keine ausgabe..

Code: Alles auswählen

#!/usr/bin/python3
import json
json.dumps([1, "simple", "list"])

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 12:24
von EyDu
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.

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 21:42
von zar1
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.

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 21:54
von Sirius3
@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.

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 21:58
von zar1
@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 :D

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 22:07
von Sirius3
@zar1: ich kann lesen :twisted:
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)
>>> 

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 22:12
von zar1
okay das kann sein das der nicht mehr als zwei values nimmt den ich hab eig nur ein item gebraucht für mehrere items ist meine Lösung ungeeignet aber wie man das dann macht habe ich keine Idee :D

Re: Datei schreiben und lesen

Verfasst: Mittwoch 8. Januar 2014, 22:37
von 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.

Re: Datei schreiben und lesen

Verfasst: Donnerstag 9. Januar 2014, 10:07
von nfehren
Ok das mit dem einschreiben hat geklappt! :)

Code: Alles auswählen

#!/usr/bin/python3

f = open("f.txt","w")
eingabe = input()
f.write(eingabe)
f.close()
Aber wie kann ich den Inhalt der Datei einzeigen lassen?
so müsste der Code doch anfangen:

Code: Alles auswählen

f = open("f.txt", encoding="utf8")

Re: Datei schreiben und lesen

Verfasst: Donnerstag 9. Januar 2014, 10:23
von /me
nfehren hat geschrieben:Aber wie kann ich den Inhalt der Datei einzeigen lassen?
Wenn man nach der durchaus recht informativen offiziellen Dokumentation geht, dann könnte man readline verwenden.

Re: Datei schreiben und lesen

Verfasst: Donnerstag 9. Januar 2014, 10:31
von nfehren
/me hat geschrieben:
nfehren hat geschrieben:Aber wie kann ich den Inhalt der Datei einzeigen lassen?
Wenn man nach der durchaus recht informativen offiziellen Dokumentation geht, dann könnte man readline verwenden.
das ist leider für Python 2 habe Python 3 :?

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))

Re: Datei schreiben und lesen

Verfasst: Donnerstag 9. Januar 2014, 10:37
von mcdwerner
der Unterschied zwischen 2 und 3 ist die 2 und die 3 in der URL ;-)
http://docs.python.org/3/library/stdtyp ... e.readline