Hallo,
naja, Du wirst schon irgend etwas verändert haben
Zu den neuerlichen Problemen:
1.) Nutze Exceptions, Speziell beim Parsen sollte man einen IOError stets abfangen (oder ab Python 2.6 mit with arbeiten ...)
2.) Kopiere Die zu Parsende Datei einmal in das selbe Verzeichnis wie Dein Script und teste erst einmal, ob der Rest klappt.
3.) Baue Pfade immer per os.join() zusammen!
4.) Teste doch mal, ob die Datei dort wirklich liegt, mit os.listdir()
So solltest Du weiter kommen!
PS: Wieso eigentlich acht Unterverzeichnisse? Ich zähle vier!
XML File gezielte Daten auslesen
die Punkte 1-4 werd ich mal ausprobieren
Zum ps:
ich hab den angegebenen Dateipfad gekürzt. Im Original sind es 8 unterverzeichnisse.
also
So sieht die eigentliche Ordnerstruktur aus.
Hab jetzt mal die XML-Datei in den Ordner kopiert, wo das Python-Skript liegt und es kommt wieder dieser IOError.
An sich will ich ja "nur" 4 Koordinaten-Punkte aus meiner XML-Datei rausgelesen haben. Damit ich mit diesen Punkten dann weiterarbeiten kann.
Hier mal die XML-Datei
Und da wär nicht schlecht die ID, und die beiden Koordinaten für x und y zu bekommen.
Zum ps:
ich hab den angegebenen Dateipfad gekürzt. Im Original sind es 8 unterverzeichnisse.
also
Code: Alles auswählen
C::\Dokumente und Einstellungen\Benutzer\Desktop\Projektordner1\projektordner2\Programm\Unterprogramm\Unterordner\Roadmap\eigeneRM3.rm
Hab jetzt mal die XML-Datei in den Ordner kopiert, wo das Python-Skript liegt und es kommt wieder dieser IOError.
An sich will ich ja "nur" 4 Koordinaten-Punkte aus meiner XML-Datei rausgelesen haben. Damit ich mit diesen Punkten dann weiterarbeiten kann.
Hier mal die XML-Datei
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE roadmap SYSTEM "roadmap.dtd">
<roadmap version="1.2">
<stations>
<station id="id0" angle="0" name="Station1">
<point x="-7962" y="4024" />
</station>
<station id="id1" angle="0" name="Station2">
<point x="4098" y="3964" />
</station>
<station id="id2" angle="0" name="Station3">
<point x="4120" y="-3062" />
</station>
<station id="id3" angle="0" name="Station4">
<point x="-7903" y="-2903" />
</station>
</stations>
</roadmap>
War das jetzt der wirkliche Name des Ordners, oder hast Du etwas verändert? Du weisst, dass bestimmte Kombinationen von '\' + Buchstaben in literalen Zeichenketten als *ein* Byte interpretiert werden!? Zum Beispiel '\n' als Zeilenende, oder '\t' als Tabulatorzeichen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du hast natürlich die Pfadangabe entsprechend geändert?Daniela hat geschrieben: Hab jetzt mal die XML-Datei in den Ordner kopiert, wo das Python-Skript liegt und es kommt wieder dieser IOError.
Wieso eigentlich ignorierst Du die Lösung von BlackJack zu penetrant? Die funktioniert doch einwandfrei!
Und die Pfadangabe wird dann def. fehlerhaft sein! Eine andere Erklärung für den IO-Fehler gibt es nicht! (Davon abgesehen übernimmt das Öffnen sogar ElementTree - das open() kann man sich also sparen)
Mich beschleicht ein wenig die Annahme, dass Du nicht sauber arbeitest.
Also als ich die Datei in den gleichen Ordner kopiert hatte, hatte ich natürlich die Pfade auch geändert.
Warum ich die Lösung von BlackJack ignoriert habe???
Ganz einfach ich hab sie nicht gelesen bzw. überlesen und nicht wirklich für voll genommen.
Tut mir wirklich leid.
Aber ich hab es grad nachgeholt und wenn ich es über die Konsole aufrufe, bekomme ich keine Fehlermeldung oder ähnliches.
Das ist doch schonmal was!
Kann ich mir auch den Inhalt von result anschauen, um zu sehen, ob es der richtige ist?
Wenn ich hinter der Funktion "main()" aufrufe, werden mir (mal wieder) ein paar Fehler angezeigt.
Fehlermeldung:
Ohne die Zeile 12 (dem main-aufruf) läuft es problemlos durch. Nur wie bekomme ich dann wenigstens zur Kontrolle die ausgelesenen Werte angezeigt? Und wie kann ich später mit den Werten arbeiten.
Vielen Dank schon mal für eure Hilfe und vor allem eurer Gedult.
Daniela
Warum ich die Lösung von BlackJack ignoriert habe???
Ganz einfach ich hab sie nicht gelesen bzw. überlesen und nicht wirklich für voll genommen.
Tut mir wirklich leid.
Aber ich hab es grad nachgeholt und wenn ich es über die Konsole aufrufe, bekomme ich keine Fehlermeldung oder ähnliches.
Das ist doch schonmal was!
Kann ich mir auch den Inhalt von result anschauen, um zu sehen, ob es der richtige ist?
Wenn ich hinter der Funktion "main()" aufrufe, werden mir (mal wieder) ein paar Fehler angezeigt.
Code: Alles auswählen
from xml.etree import ElementTree as etree
def main():
doc = etree.parse('C:\Dokumente und Einstellungen\gast_82z\Desktop\Betoscan\betoscan\NeoPlatformControl\Platform\Roadmap\eigeneRM3.rm')
result = list()
for station in doc.findall('stations/station'):
point = station.find('point')
result.append((station.get('id'),
(int(point.get('x')), int(point.get('y')))))
print result
main()
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\MeanderMovement.py", line 12, in <module>
main()
File "C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\MeanderMovement.py", line 4, in main
doc = etree.parse('C:\Dokumente und Einstellungen\gast_82z\Desktop\Betoscan\betoscan\NeoPlatformControl\Platform\Roadmap\eigeneRM3.rm')
File "C:\Python25\Lib\xml\etree\ElementTree.py", line 862, in parse
tree.parse(source, parser)
File "C:\Python25\Lib\xml\etree\ElementTree.py", line 579, in parse
source = open(source, "rb")
IOError: [Errno 2] No such file or directory: 'C:\\Dokumente und Einstellungen\\gast_82z\\Desktop\\Betoscan\x08etoscan\\NeoPlatformControl\\Platform\\Roadmap\\eigeneRM3.rm'
Ohne die Zeile 12 (dem main-aufruf) läuft es problemlos durch. Nur wie bekomme ich dann wenigstens zur Kontrolle die ausgelesenen Werte angezeigt? Und wie kann ich später mit den Werten arbeiten.
Vielen Dank schon mal für eure Hilfe und vor allem eurer Gedult.
Daniela
Na dann guck Dir doch bitte noch einmal *ganz genau* den Dateinamen an, der da in der Ausnahme steht! '\b' ist die Codesequenz für "backspace" und das ist ziemlich sicher nicht im Dateinamen enthalten.
Falls das bisher immer das Problem war, dann nimm das mal als Hinweis die exakten Daten und Tracebacks zu posten, und nicht irgendwelche gekürzten oder veränderten, bei denen gar keine Probleme auftreten würden. Dann müssen wir hier weniger raten.
Falls das bisher immer das Problem war, dann nimm das mal als Hinweis die exakten Daten und Tracebacks zu posten, und nicht irgendwelche gekürzten oder veränderten, bei denen gar keine Probleme auftreten würden. Dann müssen wir hier weniger raten.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hm ... das ist sehr seltsam!Daniela hat geschrieben:Also als ich die Datei in den gleichen Ordner kopiert hatte, hatte ich natürlich die Pfade auch geändert.
Bekommst Du denn auch die Ausgabe?Aber ich hab es grad nachgeholt und wenn ich es über die Konsole aufrufe, bekomme ich keine Fehlermeldung oder ähnliches.
Das ist doch schonmal was!
Der sollte ja ausgegeben werden ...Kann ich mir auch den Inhalt von result anschauen, um zu sehen, ob es der richtige ist?
Was bedeutet "hinter"? Wie rufst Du es denn sonst auf?Wenn ich hinter der Funktion "main()" aufrufe, werden mir (mal wieder) ein paar Fehler angezeigt.
Na die Meldung ist doch klar! Die Datei wird nicht gefunden - wie gehabtFehlermeldung:
Code: Alles auswählen
Traceback (most recent call last): File "C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\MeanderMovement.py", line 12, in <module> main() File "C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\MeanderMovement.py", line 4, in main doc = etree.parse('C:\Dokumente und Einstellungen\gast_82z\Desktop\Betoscan\betoscan\NeoPlatformControl\Platform\Roadmap\eigeneRM3.rm') File "C:\Python25\Lib\xml\etree\ElementTree.py", line 862, in parse tree.parse(source, parser) File "C:\Python25\Lib\xml\etree\ElementTree.py", line 579, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'C:\\Dokumente und Einstellungen\\gast_82z\\Desktop\\Betoscan\x08etoscan\\NeoPlatformControl\\Platform\\Roadmap\\eigeneRM3.rm'
Ah ... jetzt kapiere ich: Ohne den Aufruf, wird die Funktion definiert, aber ja nie aufgerufen - so kann es zu keinem Fehler kommenOhne die Zeile 12 (dem main-aufruf) läuft es problemlos durch.
In dem Du endlich die Datei in das selbe Verzeichnis kopierst und die Dateiangabe entsprechend änderst! Danach befolgst Du meine oben genannten Vorschläge, um Dich an das eigentliche Verzeichnis heranzutasten.Nur wie bekomme ich dann wenigstens zur Kontrolle die ausgelesenen Werte angezeigt?
Äh ... was meinst Du da genau? Also Du müßtest einfach das "result" per return zurückliefern und voila hast Du die Werte. Ganz einfach eigentlich!Und wie kann ich später mit den Werten arbeiten.
Geduldig sind wir hier eigentlich alleVielen Dank schon mal für eure Hilfe und vor allem eurer Gedult.
Wird e aber nicht. Hänge ich hinter das _print result_ noch ein _return result_ ran, wird es ganz normal compiliert ohne Fehler.Hyperion hat geschrieben:Der sollte ja ausgegeben werden ...Kann ich mir auch den Inhalt von result anschauen, um zu sehen, ob es der richtige ist?
Die Datei ist im selben Ordner, sowie im der Dateipfad in der Datei ist auch entsprechend angepasst.In dem Du endlich die Datei in das selbe Verzeichnis kopierst und die Dateiangabe entsprechend änderst! Danach befolgst Du meine oben genannten Vorschläge, um Dich an das eigentliche Verzeichnis heranzutasten.Nur wie bekomme ich dann wenigstens zur Kontrolle die ausgelesenen Werte angezeigt?
So sieht der momentane Code aus: (es hat sich nicht wirklich viel verändet)Äh ... was meinst Du da genau? Also Du müßtest einfach das "result" per return zurückliefern und voila hast Du die Werte. Ganz einfach eigentlich!Und wie kann ich später mit den Werten arbeiten.
Code: Alles auswählen
from xml.etree import ElementTree as etree
def main():
doc = etree.parse('C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\eigeneRM3.rm')
result = list()
for station in doc.findall('stations/station'):
point = station.find('point')
result.append((station.get('id'),
(int(point.get('x')), int(point.get('y')))))
print result
return result
main() #Aufruf der Funktion
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\MeanderMovement.py", line 13, in <module>
main()
File "C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\MeanderMovement.py", line 4, in main
doc = etree.parse('C:\Dokumente und Einstellungen\gast_82z\workspace\betoscan\src\eigeneRM3.rm')
File "C:\Python25\Lib\xml\etree\ElementTree.py", line 862, in parse
tree.parse(source, parser)
File "C:\Python25\Lib\xml\etree\ElementTree.py", line 579, in parse
source = open(source, "rb")
IOError: [Errno 2] No such file or directory: 'C:\\Dokumente und Einstellungen\\gast_82z\\workspace\x08etoscan\\src\\eigeneRM3.rm'
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du hast das mit dem Kopieren und Anpassen nicht verstanden! Meine Motivation war, dass Du zum einen siehst, dass das Script so läuft und zum anderen dass Du siehst, dass das mit Deinem Pfad eben nicht stimmt! BlackJack hat Dir dazu ja auch schon was geschrieben!
Wieso hast Du nicht folgendes probiert?
Genau darauf wollte ich hinaus!
Denk noch mal über BalckJacks Einwürfe und das "\b" nach ... und die Lösung dafür habe ich Dir oben auch schon genannt.
Wieso hast Du nicht folgendes probiert?
Code: Alles auswählen
def main():
doc = etree.parse('eigeneRM3.rm')
...
Denk noch mal über BalckJacks Einwürfe und das "\b" nach ... und die Lösung dafür habe ich Dir oben auch schon genannt.
OK, ich hab meinen Fehler gefunden. Ich glaub ich hatte Tomaten auf den Augen. Der Fehler war wirklich im Dateipfad zu finden, wie BlackJack gesagt hatte. Dadurch das ein Ordner mit nem kleinen "b" angefangen hat, wurde das "\b" als Escape-Sequenz angesehen. Ist mir nur vorher nicht wirklich aufgefallen bzw. überlesen.Hyperion hat geschrieben:Du hast das mit dem Kopieren und Anpassen nicht verstanden! Meine Motivation war, dass Du zum einen siehst, dass das Script so läuft und zum anderen dass Du siehst, dass das mit Deinem Pfad eben nicht stimmt! BlackJack hat Dir dazu ja auch schon was geschrieben!
Wieso hast Du nicht folgendes probiert?Genau darauf wollte ich hinaus!Code: Alles auswählen
def main(): doc = etree.parse('eigeneRM3.rm') ...
Denk noch mal über BalckJacks Einwürfe und das "\b" nach ... und die Lösung dafür habe ich Dir oben auch schon genannt.
Naja jetzt funktioniert es ja wenigstens.
Nochmals vielen Dank an Hyperion und BlackJack, ihr habt mir wirklich sehr geholfen.