Seite 1 von 2

Programmbeispiel funzt nicht

Verfasst: Samstag 5. Juli 2008, 17:59
von Lord
Hallo Community ...

Ich bin ein Absoluter Anfänger..
Und lerne gerade aus dem Buch " Python, das Umfasende Hanbuch" von Galileo Computing.
Dort ist ein Script zur Datenaufrufe beschrieben .... Ich habe den Code 1:1 abgetippt und es läuft nicht, es kommt immer ein Fehler der Besagt:
Traceback (most recent call last):
line 7, in <module>
woerter[zuordnung[0]] = zuordnung[1]
IndexError: list index out of range
Hier der Code:

Code: Alles auswählen

woerter = {}

fobj = open("woerterbuch.txt", "r")
for line in fobj:
    line = line.strip()
    zuordnung = line.split(" ")
    woerter[zuordnung[0]] = zuordnung[1]
fobj.close()

while True:
  wort = raw_input('Geben Sie ein Wort ein: ')
  if wort in woerter:
    print 'Das Deutsche Wort lautet: ', woerter[wort]
else:
  print 'Das Wort ist unbekannt!'
Sieht einer den Fehler? :cry:

Verfasst: Samstag 5. Juli 2008, 18:04
von EyDu
Lass dir mal hinter

Code: Alles auswählen

zuordnung = line.split(" ")
den Inhalt von "zuordnung" ausgeben, dann kommst du sicher selber drauf.

Re: Programmbeispiel funzt nicht

Verfasst: Samstag 5. Juli 2008, 18:05
von DasIch
Lord hat geschrieben:Sieht einer den Fehler? :cry:
Lord hat geschrieben:Python, das Umfasende Hanbuch" von Galileo Computing.
Ja ;)

Ohne woerterbuch.txt zu kennen schwer zu sagen aber könnte es sein das in der entsprechenden Zeile einfach nichts steht?

Beispiel:

Code: Alles auswählen

>>> text = '''Hallo
... 
... hallo'''
>>> for line in text:
...     words = line.split(' ')
...     print len(words)
... 
1
1
1
1
1
0
0
1
1
1
1
1
>>> example_list = []
>>> len(example_list)
0
>>> example_list[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Verfasst: Samstag 5. Juli 2008, 18:35
von Lord
Spain Spanien
Germany Deutschland
France Frankreich
Italy Italien

Das ist der Inhalt... halt Übungszwecke nech...

Verfasst: Samstag 5. Juli 2008, 18:58
von Lord
@ EyDu:

Das ist die Ausgabe:
['{\\rtf1\\ansi\\ansicpg1252\\cocoartf949\\cocoasubrtf330']
['{\\fonttbl\\f0\\fswiss\\fcharset0', 'Helvetica;}']
['{\\colortbl;\\red255\\green255\\blue255;}']
['\\paperw11900\\paperh16840\\margl1440\\margr1440\\vieww9000\\viewh8400\\viewkind0']
['\\pard\\tx566\\tx1133\\tx1700\\tx2267\\tx2834\\tx3401\\tx3968\\tx4535\\tx5102\\tx5669\\tx6236\\tx6803\\ql\\qnatural\\pardirnatural']
['']
['\\f0\\fs24', '\\cf0', 'Spain', 'Spanien\\']
['Germany', 'Deutschland', '\\']
['France', 'Frankreich\\']
['Italy', 'Italien}']
Woran liegt das??? Solange mache ich es nicht um zu kapieren, warum Python sowas macht oder es so sieht...

Verfasst: Samstag 5. Juli 2008, 21:59
von BlackJack
Das hat nichts mit Python zu tun, sondern dass Deine Textdatei keinen reinen Text enthält, sondern offenbar eine RTF-Datei ist.

Die Datei solltest Du mit einem Texteditor erstellen und nicht mit einer Textverarbeitung.

Verfasst: Samstag 5. Juli 2008, 22:01
von Lord
Also ich habe jetzt mal die CD zum Buch eingelegt und mir den Quellcode angeguckt und dabei mit meinem Zeile für Zeile veglichen.

Ich habe nicht einen Fehler gefunden, beide sind 100% identisch!

Troztdem läuft das Programm von dem Autor und meins nicht!
Ich habe sogar den Quellcode kopiert und neu eingefügt!

Selber Fehler!

Obwohl der Quellcode vom Autor vorher noch lief, sagt dann den selben Fehler an!


Wie ist das den Möglich???
Bin voll am Verzweifeln!

----------------------------------------------------------------------------------

@Black Jack:

Ja das kann sein, ich habe einen Mac und er hat eine rtf Datei raus gemacht welche ich dann in txt unbenannt habe...

Habe es aber auch als rtf beuzuhaten und den Quellcode darauf abgeändert, selber Fehler!

Selber Grund?

Weiss jetzt nicht mehr weiter!

Verfasst: Samstag 5. Juli 2008, 22:07
von audax
Der Text sollte nicht in einer Datei im RichtText-Format stehen, sondern einfach so in einer Datei.

Da du anscheind nen Mac hast, mal ein Tip:

Code: Alles auswählen

cat woerter.txt
In der Shell (Im Finder das "Terminal" aufrufen) sollte exakt den Text ausgeben, nicht mehr.

Verfasst: Samstag 5. Juli 2008, 22:53
von Michael Schneider
Hallo Lord,

was in Deiner Ausgabe vor den ersten Dict-Einträgen ausgegeben wird, ist der "Header" der Datei, der der sie öffnenden Textverarbeitungsanwendung die Einstellungen vorgibt. Wenn Du schon eine Textverarbeitung verwendest, achte darauf, dass beim "Save As" auch als Format "txt" eingestellt ist.

Womit schreibst Du denn Deine Pyhon-Skripte? Nimm doch genau diesen Texteditor, um die Datei zu speichern.

Gruß,
Michael

Re: Programmbeispiel funzt nicht

Verfasst: Samstag 5. Juli 2008, 22:58
von Michael Schneider
Hallo Lord,

wenn Du ganz sicher gehen willst, sollte es so gehen (nur zum Test):

Code: Alles auswählen

woerter = {}

filename = "woerterbuch.txt"
text = """Spain Spanien
Germany Deutschland
France Frankreich
Italy Italien"""

fobj = open(filename, "w")
fobj.write(text)
fobj.close()

fobj = open(filename, "r")
for line in fobj:
    line = line.strip()
    zuordnung = line.split(" ")
    woerter[zuordnung[0]] = zuordnung[1]
fobj.close()

while True:
  wort = raw_input('Geben Sie ein Wort ein: ')
  if wort in woerter:
    print 'Das Deutsche Wort lautet: ', woerter[wort]
else:
  print 'Das Wort ist unbekannt!'
Ungetestet...

Grüße,
Michael

Verfasst: Samstag 5. Juli 2008, 23:02
von Lord
Also meine Python Scripte schreibe ich mit Eclipse (Gute Wahl?)

Danke für den Tip mit den Coden in dem Standard Texverarbeitungsprogramm durchzuführen ;-)

Ich habe für Mac jetzt AlienConverter... Der hat aus der rft -Datei eine reine txt -Datei gemacht und es funktionierte!

Nebenbei, ich habe manchmal das Gefühl mich fest zu fahren bzw. mir den Code nicht merken zu können... Gibt es dagegen ein Rezept? Wie habt ihr es am besten gelernt? womit schreibt ihr eure Python-Programme?

Danke nochmal für eure Hilfe! :D

Verfasst: Samstag 5. Juli 2008, 23:09
von DasIch
Lord hat geschrieben:Nebenbei, ich habe manchmal das Gefühl mich fest zu fahren bzw. mir den Code nicht merken zu können... Gibt es dagegen ein Rezept? Wie habt ihr es am besten gelernt? womit schreibt ihr eure Python-Programme?
Zum schreiben ganz simpel mit (g)vim oder auch gerne mal gedit(mit Plugins).
Das wirkliche lernen von einzelnen Dingen klappt am besten dadurch das man es einfach einsetzt. Mach irgendwas und was du ständig brauchst weisst du dann automatisch, den Rest kannst du sowieso vergessen :lol: .

Verfasst: Sonntag 6. Juli 2008, 08:44
von Darii
Lord hat geschrieben:Ja das kann sein, ich habe einen Mac und er hat eine rtf Datei raus gemacht welche ich dann in txt unbenannt habe...
Auch wenn dein Problem schon gelöst ist, Datei umbenennen bringt nie was, das ist so als würdest du auf ein Auto Bus schreiben um einen Bus zu bekommen.

Für die Zukunft: Ich vermute du arbeitest mit TextEdit. Darstellung->in reinen Text umwandeln

Verfasst: Sonntag 6. Juli 2008, 09:26
von Michael Schneider
Hallo Darii!
Darii hat geschrieben:Auch wenn dein Problem schon gelöst ist, Datei umbenennen bringt nie was, das ist so als würdest du auf ein Auto Bus schreiben um einen Bus zu bekommen.
So pauschal kann man das auch wieder nicht sagen. Ich muss mit einem (französischen) Tool arbeiten, bei dem es einfach nicht möglich ist, Dateien mit der Endung "jpg" oder "gif" anzuhängen. Sobald man aber "jpg" in "jpeg" umwandelt, kann man dieses Bild anhängen und sogar als JPEG öffnen.
Andererseits kann man jenes Tool auch nicht als Maß aller Dinge ansehen. ;-)

Grüße,
Michel

Verfasst: Sonntag 6. Juli 2008, 09:50
von BlackJack
@Michael: Doch so pauschal kann man das sagen: Durch Umbenennen ändert sich der Inhalt der Datei nicht. Das ein Programm bestimmte Endungen erwartet, hat damit nichts zu tun.

Verfasst: Sonntag 6. Juli 2008, 13:27
von Michael Schneider
@BlackJack: Oh nein, das kann man nicht. ;-)
Ich habe ja nicht behauptet, dass man durch Umbenennen den Inhalt der Datei ändert oder damit alle Probleme lösen kann. Sondern ich bezog mich ganz klar (mit Zitat) auf Dariis Aussage:
Darii hat geschrieben:Datei umbenennen bringt nie was
Und es ist ja wohl unstrittig, dass das Umbenennen der Datei allein zur Lösung führte.

Windows nutzt übrigens die Dateierweiterungen sehr zweckmäßig, um die Anwendungen zu bestimmen, mit denen die Dateien geöffnet werden sollen. Von daher bringt es schon etwas. Wenn ich txt-Dateien habe, die nur lf enthalten, dann kann ich sie nach Umbenennen der Erweiterung in "wri" direkt in Wordpad öffnen, das die entsprechenden cr automatisch einfügt. Die Alternative, rechtsklick -> Öffnen mit -> Programm auswählen ... -> evtl. Festplatte durchsuchen, wäre dann doch umständlicher.

Gruß,
Michael

Verfasst: Sonntag 6. Juli 2008, 14:09
von BlackJack
Anwendung per Dateinamen zu bestimmen ist aber nur eine sehr schwache Lösung. Besser wäre es den Inhalt der Datei zu rate zu ziehen, wie das teilweise unter Linux/Unix gemacht wird, oder wie beim Mac in den Metadaten der Datei zu vermerken welche Anwendung die Datei erstellt hat. Sehr praktisch wenn es um Dateiformate geht, die man mit verschiedenen Programmen erstellen und bearbeiten kann.

Verfasst: Sonntag 6. Juli 2008, 14:30
von Darii
Ist nun aber ein bisschen spitzfindig. Ich kann mir auch ein Programm schreiben, das einen Ordner überwacht und beim umbenennen von Dateien ggf. automatisch versucht das Dateiformat zu konvertieren. In dem Fall bewirkt umbenennen etwas und ändert sogar den Inhalt. Wie hätte ich es dann formulieren sollen?

Ändern der Dateiändung bringt in den allermeisten Fällen nichts, weil dadurch fast nie der Inhalt geändert wird. ?

Verfasst: Sonntag 6. Juli 2008, 14:41
von cofi
Darii hat geschrieben:Ist nun aber ein bisschen spitzfindig. Ich kann mir auch ein Programm schreiben, das einen Ordner überwacht und beim umbenennen von Dateien ggf. automatisch versucht das Dateiformat zu konvertieren. In dem Fall bewirkt umbenennen etwas und ändert sogar den Inhalt. Wie hätte ich es dann formulieren sollen?
Dann wird allerdings der Inhalt geändert, da dein Daemon den Ordner ja überwacht und die Dateien konvertiert. ;)
Darii hat geschrieben:Ändern der Dateiändung bringt in den allermeisten Fällen nichts, weil dadurch fast nie der Inhalt geändert wird. ?
Dateiendungen zu ändern bringt nie etwas. Der Dateiheader, in dem das Formatspezifiziert wird, bleibt unangetastet. Nur Windoof ist so komisch, dass es an der Dateiendung das Format erkennen will.

@michael
Aber auch nur weil M$ den Dateiendungen so viel Bedeutung beimisst ;) Spätestens wenn man ne *.jpg in ne *.txt ändert und doppelklickt, erkennt man warum das ne doofe Idee is ^

Verfasst: Sonntag 6. Juli 2008, 15:29
von Michael Schneider
Hi cofi!
cofi hat geschrieben: Dateiendungen zu ändern bringt nie etwas. Der Dateiheader, in dem das Formatspezifiziert wird, bleibt unangetastet. Nur Windoof ist so komisch, dass es an der Dateiendung das Format erkennen will.
Das erscheint mir eine unsachliche Trotzreaktion. Ich habe bereits anhand von Beispielen bewiesen, dass das Ändern der Dateiendungen etwas bringen kann, und sei es nur in bestimmten Fällen und aufgrund der Anforderungen bestimmter Programme/OS (siehe oben). Habe auch zugegeben, dass das Umbenennen den Inhalt der Datei nicht ändert - dass das aber auch nicht maßgeblich ist, um etwas zu bewirken.

Außerdem wird das Format nicht immer im Header spezifiziert, z.B. bei Plain-Text oder Binärdateien! Dass ein Header seine Vorteile hat/hätte, kann ich nicht leugnen.
cofi hat geschrieben: @michael
Aber auch nur weil M$ den Dateiendungen so viel Bedeutung beimisst ;)
Das hat nichts mit viel oder wenig Bedeutung zutun. Sondern mit der spezifizierten Eigenschaft, dass bei Windows die Dateinamenserweiterungen mit Programmen verknüpft werden können, um das Öffnen von Dateien zu erleichtern. Ich mag Windows auch nicht sonderlich, aber diese Eigenschaft wird von vielen Benutzern gewürdigt und trägt ihren Teil dazu bei, dass Windows immernoch das meistverbreitete OS ist.
cofi hat geschrieben:Spätestens wenn man ne *.jpg in ne *.txt ändert und doppelklickt, erkennt man warum das ne doofe Idee is ^
Das hängt davon ab, mit welchem Programm Du die Erweiterung ".txt" verknüpft hast. Wenn es binärdaten anzeigen kann und Du die Datei manuell ändern möchtest, dann ist diese Umbenennung keine doofe Idee, ganz im Gegenteil.
Es kommt darauf an, was Du mit der Datei machen willst. Wenn Du Dir das darin kodierte Bild ansehen möchtest, dann gibt es doch keinen Grund, sie vorher in eine txt-Datei umzubenennen, oder?

Gruß,
Michael