Newbie - Phytonscript verwenden

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
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

Hallo,

ich möchte einen OSM Datei in eine GML Datei umwandeln und hab im Internet ein Phyton script gefunden. Nun habe ich mir Python 2.5 installiert und das Script

---> http://london.freemap.in/osm2gml_simple.py.txt <---

als Datei "osm2gml.py" gespeichert. jetzt wollte ich das script ausführen, doch ich erhalte nur fehlermeldungen.

Fehler in der CMD:

Traceback (most recent call last)
File "D:\GPS Karten\osm2gml.py", line 4, in <module>
from cElementTree import Element, SubElement, ElementTree
ImportError: No module named cElementTree

Fehler beim compillieren in der IDLE:

There's an error in your program: expected an indented block

was ich mir eigentlich nicht vorstellen kann denn der code ist vollständig übernommen. ich denke das Problem liegt einfach daran, dass ich ja irgendwie die Datei angeben muß die ich pharsen will. In der Kommandozeile habe ich schon verschidene Varianten Probiert.

scriptdatei osm-datei
scriptdatei osm-datei ausgabedatei
scriptdatei ausgabedatei osm-datei

langsam gehe ich aber davon aus, dass ich die osm Datei in den code schreiben muß oder muß ich beim starten des scriptes noch irgendwelche Parameter angeben? Wäre nett wenn mir jemand schnell helfen könnte denn ich bin voll am verzweifeln.

edit: hab vergessen zu sagen dass ich windows2k benutze
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

meikster, die Fehlermeldung sagt dir, dass du neben Python auch noch cElementTree installieren musst, welches dann noch ElementTree benötigt. Evtl. kann auch auch nur mit dem zweiten Modul fahren, wenn du in der Datei das cElementTree durch ElementTree ersetzt, denn ich rate, dass das eine nur eine optimierte Version des anderen ist.

Stefan
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

danke erstmal dafür..

habs gleich installiert und gestartet. die fehlermeldung beim kompilieren bleibt gleich. In der Komandozeile hab ich jetzt folgende Fehlermeldung:

File "D:\...", line 30
self.current[-1][attr["k"].peplace(":","_").replace(" ","_")] = attr["v"]
IndentationError: expected an indented bolck

also ein bisschen ausführlicher als die Massagebox beim Komilieren, nur leider sagt mir das überhabt nix. der Pfeil steht auf self, also denke ich das in dem Objekt der fehler liegt. suche grad nach ner möglichkeit die sache zu debuggen...

ausserdem weiss ich immer noch nicht wie ich dem script sagen kann welche Datei er umwandeln soll..

ich gebe in den cmd immer

osm2glm.py datei.osm datei.gml

ein.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Das sieht eher so aus, als hätte er beim Einfügen des Quelltextes in den Editor irgendwo die Einrückung kaputt gemacht - und die ist bei Python sehr wichtig. Prüf das noch einmal genau.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Ansonsten liest er die Eingabedaten von sys.stdin (normalerweise die Konsole) und schreibt die Ergebnisse auch wieder nach sys.stdout (ebenfalls die Konsole).

Unter Linux würde ich dann etwas in der Art machen:

Code: Alles auswählen

cat OSM-Datei | ./osm2glm.py > GLM-Datei
(ungetestet)

Also eine Folge von Ausgabeumleitungen. Ich habe allerdings keine Ahnung, ob und wie das unter Windows gehen könnte.
BlackJack

Das Skript verwendet führende Tabs und Spaces *gemischt*. Dafür gehört dem Autor was auf die Finger gehauen.

@maikster: Die Daten werden auf der Standardeingabe erwartet und das Ergebnis wird auf die Standardausgabe geschrieben. Aufruf wäre also (wohl auch unter Windows):

Code: Alles auswählen

osm2glm.py < datei.osm > datei.gml
Oder:

Code: Alles auswählen

type datei.osm | osm2glm.py > datei.gml
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

danke für die Beiträge, habe alles gemacht und festgestellt dass ne ganze menge falsch eingerückt war. darauf muß man erstma kommen... obwohl die Fehlermeldung dann doch schon recht eindeutig war. sry

nun besteht aber wieder folgendes Problem:

Traceback (most recent call last):
File "D:\GPS Karten\osm2gml.py", line 4, in <module>
from cElementTree import Element, SubElement, ElementTree
ImportError: No module named cElementTree

hab natürlich beachtet was sma geschrieben hatte und mittlerweile gleich beide Module installiert... stehen in den Verzeichnissen

C:\Python25\Lib\xml\etree\
C:\Python25\libs\
C:\Python25\DLLs

also wird das wohl geklappt haben.... der Windowsinstaller hat jedenfalls keine Fehlermeldung gegeben

Muß ich mein Script vielleicht in einem bestimmten Ordner starten?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

maikster hat geschrieben:Muß ich mein Script vielleicht in einem bestimmten Ordner starten?
Nö, eigentlich nicht. Ich hätte allerdings erwartet, dass es auch ein Verzeichnis "elementtree" unter ...\Lib\site-packages" geben würde. Das wäre (ohne das jetzt wirklich ausprobiert zu haben) der normale Platz so weit ich weiß.

Starte doch einfach mal Python in der Eingabeaufforderung, sodass du die ">>>" als Prompt siehst und gib "import ElementTree" (ohne die ") ein. Wenn das keinen Fehler gibt, ist das elementtree-Modul korrekt installiert. Dann nochmal das selbe mit "import cElementTree". Wenn da keine Fehler kommen, wird auch dein Skript laufen (bzw. nicht mehr diesen Import-Fehler haben ;)

Stefan
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

der Import in der Commandline hat nicht geklappt

du hast recht den Ordner C:\Python25\Lib\site-packages\elementtree gebit es natürlich auch
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

maikster hat geschrieben:der Import in der Commandline hat nicht geklappt
Bist du dir sicher, dass du nur ein Python installiert hast und du "C:\Python25\python.exe" aufrufst? Denn wenn sich unter site-packages das Modul befindet, kannst du das auch importieren... denke ich.

Stefan
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Du sagtest ja das du Python25 installiert hast, elementtree ist dort bereits drin enthalten.
Kannst ja noch folgendes ausprobieren. (Was meiner Meinung nach funktionieren sollte)

Ersetze den import:

Code: Alles auswählen

from cElementTree import Element, SubElement, ElementTree
durch

Code: Alles auswählen

from xml.etree.cElementTree import Element, SubElement, ElementTree
Edit: import auf cElementTree geändert.
Zuletzt geändert von Zap am Donnerstag 3. Januar 2008, 13:54, insgesamt 1-mal geändert.
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

habs sonst immer aus dem Startmenue gestartet, aber jetzt explizit auf die python.exe geklickt und es gab die selbe Fehlermeldung.... aber die Ordner sind da.... habs nochmal überschrieben (d.h. drüberinstalliert) keine Änderung.. hab auch die 2.5´er Version genommen usw...
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Bin gerade mal auf der Effbot Seite gewesen. Dort gibts kein ElementTree win32-binary das man für Python25 runterladen kann. (logisch, da es mittlerweile ein built-in ist ;))
Du musst dich da irgendwo vertan haben.
Teste mal den oben beschriebenen import.
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

http://effbot.org/media/downloads/eleme ... .win32.exe
hab ich genommen... hab auch einen kleinen erfolg, denn das Verzeichnis heisst "elementtree" und nicht "ElementTree" und jetzt importiert er das Package in der Kommandozeile ohne Fehlermeldung... doch beim komilieren findet er jetzt Element, SubElement und ElementTree nicht. ich probiers nochmal so wie du sagst
maikster
User
Beiträge: 7
Registriert: Donnerstag 3. Januar 2008, 10:35

so, ich habe jetzt versiedene Sachen probiert nud zumindest hab ich die Sache mit dem Import gelöst. Es kommt dort keine Fehlermeldung mehr. aber wenn ich das Script laufen lasse kriege ich jetzt folgende Fehler:

bei Windows:

File "D:\GPS Karten\osm2gml.py", line 9, in <module>
class osm2gml (ContentHandler):
File "D:\GPS Karten\osm2gml.py", line 62, in osm2gml
for i in attr['segments']:


bei Linux:

Traceback (most recent call last):
File "osm2gml.py", line 143, in ?
xml.sax.parse( sys.stdin, osmParser )
File "/user/lib/python2.2/site-packages/_xmlplus/sax/__init__.py",line 31, in parse
parser.parse(filename_or_stream)
File "/usr/lib/python2.2/seite.packages/_xmlplus/sax/epatreader.py", line 109, in parse
xmlreader.IncrementalParser.parse(self, source)

usw....
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Traceback (most recent call last):
Bitte nur vollständige Tracebacks posten, sonst fällt es schwer, den Fehler zu ermitteln.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Das
maikster hat geschrieben:Traceback (most recent call last):
heißt, dass die Fehlerstelle am besten ganz unten in dem Stacktrace zu erkennen ist. Diese hast du aber genau abgeschnitten. Daher lässt sich so nicht viel sagen.
Antworten