Seite 1 von 1
readline() überprüfen
Verfasst: Montag 20. August 2007, 08:39
von Kuttengeier
Hallo Community,
ich schreibe gerade für mich hier in der Firma einen kleinen Notizblock. Was man so an Freeware oder in Outlook findet ist nicht unbedingt das, was ich suche, also versuche ich mich einfach mal selbst dran einen zu schreiben.
Er soll nicht viel können, aber die funktionsweise hab ich mir so gedacht:
-> in einer Datei werden die Notizen nach folgendem Muster abgelegt:
<id>|<titel>|<content>\n
<id>|<... u.s.w.
-> das Programm soll immer eine Zeile auslesen
->mit hilfe von split() will ich das | Zeichen erkennen und mir eine Liste zurückgeben lassen:
list = [("<id>", "<titel>", "content"]
Das Ausleseverfahren hab ich mir so vorgestellt, dass ich mit readline() immer eine Zeile auslese, verarbeite und dann zur nächsten springe. Das habe ich mir eine while-Schleife vor. Aber wie kann ich überprüfen, ob readline() nicht schon unten angekommen ist?
Meine Idee war:
Aber geklappt hat das nicht. Auch (line=fp.readline())==True hat nicht geklappt. Ich habe leider keine Idee, wie ich das hinbekommen könnte.
Freue mich auf Antwort
Kuttengeier
Verfasst: Montag 20. August 2007, 09:00
von Kuttengeier
Sry für den Doppelpost, aber ich habe das problem inzwischen gelöst.
1. Ich weiß nicht, ob es readline() gibt, aber ich nutze jetzt readlines()
2. Statt while ne for schleife
Naja, ich will euch meinen Code einfach mal zur Verfügung stellen. Für Kritik und Verbesserungsvorschläge bin ich immer offen. Je mehr gemeckert wird, desto mehr lerne ich
Code: Alles auswählen
fp=open("notes.txt", "r")
line = fp.readlines()
for i in range(len(line)):
line[i] = line[i].split("|")
line[i][2].replace("\n", "")
print line[i][0]+"|"+line[i][1]+"|"+line[i][2]
fp.close()
Das replace() macht noch nicht ganz, was es soll, aber das bekomme ich schon noch iwie in den griff. Hoffe ich jedenfalls
MfG
Kuttengeier
.:edit:.
Auch den fehler behoben. Musste die änderung in einer Variablen speichern. Zum nachvollziehen nochmal der neue Text:
Code: Alles auswählen
for i in range(len(line)):
line[i] = line[i].split("|")
line[i][2] = line[i][2].replace("\n", " ")
print line[i][0]+"|"+line[i][1]+"|"+line[i][2]
Verfasst: Montag 20. August 2007, 09:12
von Leonidas
``readlines()`` ist eine Krücke, die schon längst nicht mehr nötig ist:
Code: Alles auswählen
from __future__ import with_statement
with open('notes.txt', 'r') as fp:
for line in fp:
print line
Verfasst: Montag 20. August 2007, 09:42
von Kuttengeier
Hmm... sieht ja ganz elegant aus.
Könntest du erklären, was da pasiert? ^^ Ich werd da nich schlau draus. Hab zwar schon geguckt im Net, auch in der PyDocu, aber ich versteh das modul und die with anweisung irgendwie nicht.
Kuttengeier
.:edit:.
Das in diesem Modul viele Funktionen sind, die später mal standart werden sollen hab ich bereits rausgefunden
Verfasst: Montag 20. August 2007, 11:21
von lunar
Verfasst: Montag 20. August 2007, 12:28
von Kuttengeier
ok, danke
Habs verstanden.
Danke,
Kuttengeier
Verfasst: Montag 20. August 2007, 12:42
von Joghurt
Wenn du mal Zeit und Lust hast, solltest du dich mal mit (py)sqlite beschäftigen. Warum das Rad (Datenbank) zweimal erfinden?
Verfasst: Montag 20. August 2007, 12:48
von Kuttengeier
Weil ich erstmal eine kleine Simple lösung haben wollte. Ohne SQL oder so. Das ist mir für soeine kleinigkeit zuviel Aufwand. Wenn ich das Skript weiterentwickle und wenn es größer wird kann man sich das nochmal durch den Kopf gehen lassen, aber das sind jetzt mit Kommentaren 30 Zeilen Code. Ich finde ne DB is dafür zuviel Aufwand. Jedenfalls erstmal.
Aber trotzdem danke, werde ich demnächst mal probieren. Einfach um es zu lernen.
Kuttengeier
Verfasst: Montag 20. August 2007, 13:00
von HWK
Kuttengeier hat geschrieben:
Mehr python-like wäre:
P.S.
funktioniert natürlich auch ohne das with-Statement, das es ja erst seit Python 2.5 gibt.
MfG
HWK
Verfasst: Montag 20. August 2007, 14:09
von Kuttengeier
original von HWK
funktioniert natürlich auch ohne das with-Statement, das es ja erst seit Python 2.5 gibt.
Naja, kann ich es gleich mit einlernen. Schaden kann es ja nicht
Das mit dem join() werde ich umsetzen, danke
Kuttengeier
Verfasst: Montag 20. August 2007, 14:26
von Leonidas
Kuttengeier hat geschrieben:Weil ich erstmal eine kleine Simple lösung haben wollte. Ohne SQL oder so.
Eine simple Lösung würde ``pickle`` verwenden. Das ist einfacher als Textdateien zu schreiben und zu parsen.
Verfasst: Dienstag 21. August 2007, 05:06
von Kuttengeier
Leonidas hat geschrieben:Eine simple Lösung würde ``pickle`` verwenden.
Das kannte ich bis eben noch nicht, aber danke, ich werd es bei gelegenheit ausprobieren.
Kuttengeier
Verfasst: Dienstag 21. August 2007, 10:46
von lunar
Leonidas hat geschrieben:Kuttengeier hat geschrieben:Weil ich erstmal eine kleine Simple lösung haben wollte. Ohne SQL oder so.
Eine simple Lösung würde ``pickle`` verwenden. Das ist einfacher als Textdateien zu schreiben und zu parsen.
Dafür ist das Datenformat von Pickle nicht portabel... Ich wüsste nicht, wie ich Pickle-Dateien in Java auslesen könnte.
Verfasst: Dienstag 21. August 2007, 10:52
von Leonidas
lunar hat geschrieben:Dafür ist das Datenformat von Pickle nicht portabel... Ich wüsste nicht, wie ich Pickle-Dateien in Java auslesen könnte.
Ich glaube, dass blackbird mal das pickle-Protokoll in PHP implementiert hat. So würde es eben auch in Java gehen.
pickle ist nun mal die einfachste Lösung, denn die einfachste Lösung muss nicht portabel sein. Es ging ja darum, das Notizprogramm in Python zu schreiben und nicht in Java.
Verfasst: Dienstag 21. August 2007, 11:09
von Kuttengeier
Ja, ich möchte nur ein Pythonprogramm und beabsichtige es auch nicht es in Java oder eine andere Sprache zu portieren, also reicht das ja.
Und wenn es notwenig sein sollte denke ich, werde ich auf Datenbanken zurückgreifen.
Kuttengeier
Verfasst: Dienstag 21. August 2007, 11:17
von BlackJack
Bei Java sollte das "entpickeln" mit Jython gehen.
Falls es doch eine simple Textdatei mit Trennzeichen sein soll, würde ich auf jeden Fall das `csv`-Modul aus der Standardbibliothek vorschlagen, anstatt das mit `split()` und `join()` selber zu bauen. Das Modul kommt auch automatisch damit zurecht, wenn Werte das Trennzeichen oder Zeilenumbrüche enthalten.
Verfasst: Dienstag 21. August 2007, 11:44
von Kuttengeier
Danke,
ich werde aber erstmal auf Pickle zurückgreifen und im Anschluss csv probieren. Was mir dann besser gefällt nutze ich dann weiter.
So long,
Kuttengeier