Anfänger: In textdatei nur in bestimmte Zeile schreiben?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
chrave
User
Beiträge: 8
Registriert: Freitag 25. September 2009, 18:42

Hallo an alle,

ich habe eine Einsteigerfrage:

Kann ich Python beibringen bei bestimmten Bedingungen nur zur 2. Zeile einer Textdatei hinzuzufügen? Oder CSV?

Aktuell habe ich 3 Arten von InformationsTypen und ein Script, welches Infos zu Typ1 in Zeile 1 schreibt, dann mache ich einen Zeilenumbruch und es wird Typ2 in Zeile 2 geschrieben und dann nach einem erneuten Zeilenumbruch in Zeile 3.

Zieht ca. so aus ;-):
müller, meier, schmidt
hans, peter, werner
CDU, SPD, Pirat

Wenn ich das Script, welches mir Informationen sammelt nun auf eine andere Datei laufen lasse möchte ich, dass Typ1 wieder in Zeile 1 kommt, Typ2 in Zeile 2 und Typ3 in Zeile 3! Geht das irgendwie? Kann ich dem Script sagen wieder in Zeile 1 anzufangen und dort Sachen hinzuzuschreiben? Zum Beispiel findet er einen Vornamen, also soll er jetzt hinter werner noch den neuen Vornamen schreiben?

Meine txt soll also wie eine kleine Datenbank fungieren, ähnlich einer CSV, nur halt Spalten und Zeilen transponiert! Leider kann man bei CSV auch nur ganze Zeilen schreiben, oder? Es würde mir auch helfen, wenn man in einer CSV bei getroffenem Kriterium halt nur zur 3. Spalte ein Feld hinzufügen kann? Geht das?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Nicht, ohne die Datei vorher komplett zu lesen und auseinander zu fummeln. Du musst die Datei parsen und anschließend komplett neu schreiben. Ein Grund, warum deine Art der Speicherung denkbar ungünstig ist.

Prinzipiell könnte es so funktionieren:

Code: Alles auswählen

with open('beispiel.txt') as fp:
  cname = fp.readline().strip().split(', ').append('Hans')
  fname = fp.readline().strip().split(', ').append('Herbert')
  party = fp.readline().strip().split(', ').append('Grüne')
with open('beispiel.txt', 'w') as fp: 
  fp.write(', '.join(cname) + '\n')
  fp.write(', '.join(fname) + '\n')
  fp.write(', '.join(party) + '\n')
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

zum reine Lesen kannst du Zeilen auch gezielt mit seek() anspringen. Das funktioniert beim Schreiben aber AFIAK nicht, d.h. du kannst nicht sagen "Schreib das und das in die 2. Zeile" (korrigiert mich, wenn das nicht stimmt.

Wie defnull schon sagt, in einer Datei, die laufend ergänzt wird ist sowas ungünstig. Besser wäre eine einfache DB. :-)

Gruß, noisefloor
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Der Ansatz mit seek bringt aber nur dann etwas, wenn man weiß wo die Zeilen liegen. Das trifft im allgemeinen Fall natürlich nicht so recht zu.

Ich würde aber auch eine Datenbank empfehlen. Wenn du es schön einfach haben willst, dann benutze SQLite. Wenn du einen möglichst einfachen Ansatz willst und es die auf Geschwindigkeit oder komplexe Suchoperationen nicht drauf ankommt, dann kannst du auch einfach die gesamte Datei neu schreiben. Entweder per Hand, mit dem [mod]csv[/mod]-Modul oder mit dem [mod]pickle[/mod]-Modul.
Das Leben ist wie ein Tennisball.
chrave
User
Beiträge: 8
Registriert: Freitag 25. September 2009, 18:42

Hallo,

danke schonmal für die Antworten. Das mit dem alles einlesen und anschließend neu schreiben klingt natürlich etwas rechenaufwändig, aber der leichteste Schritt bis jetzt.

Ich bin mir nicht im Klaren darüber, was es bedeutet eine Datenbank mit Python anzulegen? Wie würde das funktionieren? Ich beherrsche SQL (die Query Sprache) recht gut und habe sie auch schon benutzt, nur fehlt mir zum Anlegen noch jegliche praktische Erfahrung. Was wären da die ersten Schritte?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Aufwendig wird es erst bei sehr vielen Daten. So eine schöne Datenbank ist allerdings viel komfortabler. Schau der mal die Doku zum SQLite-Modul an. Dort gibt es auch eine Menge Beispiele. Wenn du wenigen Absätze Einleitung gelesen hast, dann kannst du auch ganz schnell loslegen. Nur zur "execute"-Methode solltest du dir noch einmal gesondert anschauen, wie du Parameter übergeben kannst.
Das Leben ist wie ein Tennisball.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

SQL + Python ist recht simpel, da es eine einheitliche API zum Zugriff auf SQL-DBs gibt.

Tutorials gibt es dazu sehr viele, aber auf der Seite http://docs.python.org/library/sqlite3.html ist direkt im ersten Beispiel alles drin, was man zum anfang braucht:
  • DB öffnen
    Verbindungs-Cursor setzen
    SQL Befehl
    SQL Befehl ausführen (Commit)
Da SQLite in der Standard-Python Distribution seit Version 2.5 drin ist kannst du auch ziemlich sicher sein ,dass dein Code auf den meisten Rechnern mit Python läuft.

Gruß, noisefloor
Antworten