Quellcode Zeile für Zeile einlesen

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.
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

Hallo zusammen,
ich habe da mal eine Frage:
Wie schaffe ich es, dass mein Programm aus einer anderen Datei (*.txt) Zeile für Zeile den Code einließt und anschließend jeder geraden Zeile den Namen deutsch und jeder ungeraden Zeile den Namen englisch zuweist. Im konkreten Beispiel will ich ein Wörterbuch erstellen.
Jetzt habe ich auch noch eine andere Möglichkeit:

Code: Alles auswählen

abc = {"deutsch1": "englisch1",
       "deutsch2": "englisch2",
       ...}
Hierbei handelt es sich um ein Dictionary. Dies ist aber eine wesentlich kompliziertere Methode.
Was soll ich tun?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@crazyprogrammer: die Frage, die Du Dir stellen solltest, ist "was will ich mit den eingelesenen Daten tun?" Man ließt ja nicht nur Dateien zum Selbstzweck, sondern muss auf den eingelesenen Daten arbeiten. Und je nach Aufgabe bieten sich verschiedene Datenstrukturen an.
BlackJack

@crazyprogrammer: Erfinde keine eigenen Datenformate wenn sich das vermeiden lässt. Es gibt schon so viele für die es Parser gibt. CSV, JSON, XML, …
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@Sirius3: Eigentlich ist etwas anderes. Ich wollte mir ein Programm zum Lernen von Vokabeln schreiben. Ich bin (leider) noch Schüler.
Dieses Programm muss im Prinzip nur vier Dinge können:
- neue Vokabeln erkennen und zur anderen Datei hinzufügen
- alle Vokabeln aus der Datei einlesen und ausgeben
- einmal die deutschen Vokabeln ausgeben und die lateinischen abfragen
- und das gleiche andersherum (Latein ausgeben, Deutsch abfragen)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

crazyprogrammer hat geschrieben:Ich bin (leider) noch Schüler.
Wieso "leider"? Hach, die Schulzeit hatte auch was für sich :-)
crazyprogrammer hat geschrieben: Dieses Programm muss im Prinzip nur vier Dinge können:
- neue Vokabeln erkennen und zur anderen Datei hinzufügen
- alle Vokabeln aus der Datei einlesen und ausgeben
- einmal die deutschen Vokabeln ausgeben und die lateinischen abfragen
- und das gleiche andersherum (Latein ausgeben, Deutsch abfragen)
Überlege Dir zunächst, wie Du *im* Programm eine Vokabel abbildest, sprich, wie sieht eine passende Datenstruktur aus und welche Operationen darauf gibt es.

Erst im Anschluss überlegst Du Dir, wie Du das ganze serialisieren willst. Ich denke JSON klingt für Deine Zwecke optimal! Dafür gibt es in Python ein Modul in der Standardlib namens ``json``. Das ist kinderleicht zu nutzen. Du kannst es natürlich auch anders serialisieren, bloß nicht mittels eines eigenen Formates... BlackJack schrieb Dir ja schon, wieso ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@Hyperion: im Programm... Was bedeutet das? Ich hätte jetzt einfach an einen String gedacht. Und den ersten soll das Programm mit z. B. print ausgeben und den zweiten mit raw_input() (oder: raw_input(vokabel) ) abfragen. Wenn dann dieses raw_input() mit der Übersetztung übereinstimmt, geht ein Punktezähler einen Punkt weiter.

Ich kann dieses Modul nicht importieren. Und in meiner Standardlib finde ich es auch nicht... :(
Aber das finde ich ok.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

crazyprogrammer hat geschrieben:@Hyperion: im Programm... Was bedeutet das?
Naja, Du musst doch Code schreiben, um Deine oben angegebenen Funktionalitäten zu programmieren. Diesen Code schreibst Du *bis auf alles*, was mit dem Speichern oder Laden zu tun hat. Erst wenn Du das fertig hast, machst Du Dich an das Laden und Speichern. Denn beim ersten Schritt entdeckst Du ggf., dass eine gewählte Datenstruktur nicht optimal ist und noch umgestellt werden muss. Hättest Du das Laden und Speichern dafür schon fertig, müsstest Du auch diese noch einmal anfassen und ändern. Bei vielen Daten in einer Vokabeldatei käme noch hinzu, dass du das veraltete Format in das neue konvertieren müsstest, um die Daten weiter zu verwenden. Daher ist es imho sinnvoller, eben erst einmal alles ohne Laden und Speichern zu programmieren. Dieses wird mittels JSON wirklich *trivial* werden :-)

Welche Python Version verwendest Du denn? ``json`` ist wirklich schon lang dabei, iirc seit 2.6...

Hast Du denn mal ein ``import json`` in einer Python-Shell ausgeführt? Zudem kannst und solltest Du dann in der Dokumentation nachlesen. Dort findest Du es im Abschnitt 19.2 für Python 3.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

Naja, ich hab Python 2.5.
Und ich habe z. B. "import json" und "import JSON" versucht. Aber demnächst werde ich schon updaten. Ich habe nur bedenken, dass nicht alle meine bisherigen Programme einwandfrei laufen werden.
Heute ist auch gerade ein Buch über Python 3 mit Software-CD eingetroffen, dass ich bestellt habe. Da habe ich auch gleich die passende Software.
BlackJack

@crazyprogrammer: Für 2.5 geschriebene Programme laufen in aller Regel auch unter 2.7. Bei Python 3 muss man dann allerdings einiges ändern. Das 2to3.py-Skript (ist sowohl bei aktuellen 2er-Versionen als auch bei den 3ern dabei) kann dabei helfen.

Edit: Und wenn die 3er-Version auf der Buch-CD schon etwas älter ist, würde ich die gar nicht erst installieren sondern eine aktuelle 3er installieren. Du machst Dir da zu viele Gedanken darum ob die Quelltexte im Buch genau zu der Python-Version passen für die das Buch ist. Bei einem Buch für 2.x sollte man sich die aktuellste 2er installierren und bei einem Buch für 3.x die aktuelle 3er-Version. Innerhalb der Major-Releases wird bei Python viel Wert auf Rückwärtskompatibilität gelegt.
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@BlackJack: OK, ich werde es so machen. Fragt sich nur: Welche ist di aktuellste Version für Python?
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Die größte Zahl die Python.org unter Downloads anzeigt, ganz einfach.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@crazyprogrammer: Im Moment 2.7.8 und 3.4.1.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

crazyprogrammer hat geschrieben:Welche ist die aktuellste Version für Python?
<klugscheiß>Es gibt keinen Superlativ von aktuell! Aktuell ist nicht steigerbar</klugscheiß>
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@darktrym: :lol: Genau
@BlackJack: Ich habe mir 3.4.1 runtergeladen.
@Hyperion: :idea: Jetzt weiß ich's! :mrgreen:
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich glaube du hast folgendes ueberlesen:
BlackJack hat geschrieben:@crazyprogrammer: Für 2.5 geschriebene Programme laufen in aller Regel auch unter 2.7. Bei Python 3 muss man dann allerdings einiges ändern. Das 2to3.py-Skript (ist sowohl bei aktuellen 2er-Versionen als auch bei den 3ern dabei) kann dabei helfen.
[...]
Bei einem Buch für 2.x sollte man sich die aktuellste 2er installierren und bei einem Buch für 3.x die aktuelle 3er-Version. Innerhalb der Major-Releases wird bei Python viel Wert auf Rückwärtskompatibilität gelegt.
Python 3 fuer ein Python 2 Buch kann funktionieren, aber du musst dafuer im Grunde schon Python koennen ... oder zumindest um die genauen Unterschiede zwischen Python 2 und 3 wissen.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Finde den Ansatz besser als Python 3 und dann Python 2 Besonderheiten zu lernen.
Zum einen existiert viel Legacy 2er Material zum anderen kann's nicht schaden früh genug die Unterschiede zu kennen und elegant zwischen beiden Welten zu wandern, statt nur Python 3 Code zu erzeugen.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@darktrym: Das dürfte einen "blutigen" Anfänger aber überfordern, da es dem Lernen eine weitere Komplexitätstufe hinzufügt... und ich sehe keinen Mehrwert darin, möglichst "früh" Unterschiede zu lernen. Aber diese Schwierigkeit ist ja einfach vermeidbar, indem man das zum Buch passende Python nutzt ;-) (Was jetzt schon drei mal geschrieben worden ist :mrgreen: )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

darktrym hat geschrieben:[...] und elegant zwischen beiden Welten zu wandern, statt nur Python 3 Code zu erzeugen.
Das hast du jetzt zwar ganz schoen gesagt, statt "elegant wandern" wird daraus aber ein "schmerzhaft stolpern" oder "hilflos hoppeln", wenn man weder das eine noch das andere kennt.
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@cofi: Ich wandere trotzdem in beiden Welten.

Das Buch für Python 2.5.2 war nur ausgeliehen. Ich habe es schon zurückgegeben und mir eins für Python 3 bei Amazon gekauft.
Außerdem waren die ganzen Skripte in Python 2.5.2 nicht wirklich gute, sondern eher Einsteigerprogramme. Einige habe ich schon verbessert, andere müssen noch geändert werden. Aber ich habe ja Python 2.5.2 mit IPI-TurtleGrafik und die IDLE und die Python (command line) für Python 3.
BlackJack

@crazyprogrammer: Turtle-Grafik und IDLE hast Du auch bei Python 3. Wie gesagt ist das `turtle`-Modul aus der Python-Standardbibliothek mittlerweile das `xturtle` aus dem Buch.
Antworten