Seite 1 von 1

noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 17:32
von buthor
Hallo,

ich habe folgendes Problem:
mit meinem python-script lade ich eine xml-Datei aus dem Internet. Die XML-Datei ist UTF-8 codiert. Die XML-Datei parse ich mit libxml2.parseDoc und hole mir daraus mit
xpath (xpathEval) u.a. einen Namen und eine URL.
Nun erstelle ich anhand des Namens einen kompletten Pfad, hol mir die Datei und speichere sie im Dateisystem unter dem erstellten Pfad.

Das funktioniert auch zu 98% immer, außer wenn im Dateinamen Umlaute, bzw Sonderzeichen enthalten sind.

z.B. der zusammengesetzte Pfad lautet:
/platte/Aufnahmen/Serien/Magnum/Magnum (Saras Rückkehr / Kalter Krieg unter heißer Sonne).mp4
Das wird auch so in der Console korrekt mit Umlauten etc angezeigt

Wenn ich dann an die Stelle Download komme, kommt der Fehler:

Traceback (most recent call last):
File "xxx.py", line 564, in <module>
aufnahme.downloadMovie()
File "xxx.py", line 286, in downloadMovie
urllib.urlretrieve( url, fullpath )
File "/usr/lib/python2.6/urllib.py", line 93, in urlretrieve
return _urlopener.retrieve(url, filename, reporthook, data)
File "/usr/lib/python2.6/urllib.py", line 243, in retrieve
tfp = open(filename, 'wb')
IOError: [Errno 2] No such file or directory: '/platte/Aufnahmen/Serien/Magnum/Magnum (Saras R\xc3\xbcckkehr / Kalter Krieg unter hei\xc3\x9fer Sonne).mp4'

Und ich weiß nicht, was ich tun soll. Hab schon glaube ich alles ausprobiert mit encode und decode.
Ich weiß nicht weiter.

Kann mir da jemand helfen?
Komischerweise habe ich bereits mit diesem Code Dateien heruntergeladen, die Umlaute im Dateinamen haben.

Re: noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 17:52
von jerch
Hast Du mal versucht, die url-encodiert abzuschicken? Dann werden die Umlaute nicht mehr als UTF-8 rausgeschickt.

Re: noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 18:00
von buthor
ich hole mir ja am Anfang das rss-file mit

rss = libxml2.parseDoc( urllib.urlopen( URL ) )

meinst Du diese URL?
also
rss = libxml2.parseDoc( urllib.urlopen( urllib.urlencode( URL ) ) )

Re: noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 18:03
von BlackJack
@buthor: Speziell in diesem Fall dürfte das weniger mit Umlauten zu tun haben, sondern dass da ein Schrägstrich im Dateinamen ist. Der Pfad beschreibt ja die Datei ' Kalter Krieg unter heißer Sonne).mp4' im Verzeichnis '/platte/Aufnahmen/Serien/Magnum/Magnum (Saras Rückkehr /'

Re: noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 18:53
von buthor
oh, das ist mir noch gar nicht aufgefallen.

bedeutet, im Dateinamen den Slash entfernen oder escapen. richtig?

Re: noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 19:13
von BlackJack
@buthor: Und eventuell noch andere Zeichen, die ein Dateisystem eventuell nicht mag.

Re: noch ein encoding-Problem?

Verfasst: Freitag 11. Mai 2012, 19:58
von buthor
Hallo BlackJack

vielen Dank für das gute Auge :D und die schnelle Antwort.

ein kleines replace("/","-") wirkt Wunder.

funktioniert!!!


DANKE

Re: noch ein encoding-Problem?

Verfasst: Samstag 12. Mai 2012, 10:27
von lunar
@buthor: Gibt es einen besondere Grund dafür, dass Du libxml verwendest? Im Allgemeinen gibt es bessere, weil komfortablere Python-APIs zur XML-Verarbeitung, beispielsweise ElementTree in der Standardbibliothek, oder lxml.

Re: noch ein encoding-Problem?

Verfasst: Samstag 12. Mai 2012, 12:24
von buthor
Nein einen besonderen Grund gibt es nicht.

Bin noch relativ neu im python programmieren.
Und wie das so ist als Einsteiger: probieren-googlen-lesen-fragen.
Und wenn man dann was besseres findet: ändern.

Danke für den Tipp. Ich werds mal ausprobieren.

Re: noch ein encoding-Problem?

Verfasst: Samstag 12. Mai 2012, 12:42
von Hyperion
buthor hat geschrieben: Bin noch relativ neu im python programmieren.
Und wie das so ist als Einsteiger: probieren-googlen-lesen-fragen.
Ich denke genau diese Erfahrung macht deutlich, wie gut Leonidas' Idee vom "Unfuck the Wiki"-Sprint ist. Denn unsere Modul-Liste ist teilweise veraltet und imho auch zu "kurz". Wie oft schlagen wie hier Unwissenden Module (und APIs) vor (etree -> lxml, http -> requests, ...)? Natürlich ist die Sichtbarkeit des Wikis nicht hoch, aber wenn man dort auf etwas aktuelles verweisen könnte, wäre das imho schon ein Fortschritt.

... und sobald Inyoka kommt, erhöht sich ja auch die Sichtbarkeit... SCNR :mrgreen: