2016-03-21 8 views
1

FYI - das ist Programm verwendet Django, aber ich bin NICHT Tagging es als solches, weil es kein Django-Problem ist. Der django-Code ist hier für KontextUnicode-Darstellung eines Objekts zurück in ein Objekt (in Python)

~~ Der Hintergrund ~~

ich einen Fehler entdeckt, die ich in einem Programm hatte. Kurz gesagt, verwende ich urlparse.urlparse, um Informationen von einem bestimmten URI zu erhalten und in einer Datenbank zu speichern.

Das Ziel ist, so etwas zu tun: ist

url = urlparse.urlparse('http://somedomain.com/yada/yada') 
some_instance = Domain(address=url.netloc) 

~~ Das Problem ~~

Das Problem, dass wegen eines Fehlers bei der Codierung, die Datenbank ist voll von den urlparse Objekt. Beim Abrufen der Instanz aus der Datenbank ist das Ergebnis daher eine Unicode-Zeichenfolge:

some_instance = Domain.objects.get(pk=XX) 
some_instance.address 
>>> u"ParseResult(scheme=u'http', netloc=u'www.somedomain.com', path=u'/', params='', query=u'_vsrefdom=googleppc', fragment='')" 

Oops.

~~ Die Frage ~~

ich eine Reihe von Aufzeichnungen gehen zurück und beheben Klar müssen. Was ich gerne wissen möchte, ist, ob es eine gute Python-Methode gibt, um eine Unicode-Darstellung eines Objekts (nicht die tatsächliche .__unicode__() Rückgabe) zurück in das Objekt selbst wiederherzustellen.

Gedanken?

Ich habe mich ein wenig auf Google und StackOverflow umgeschaut, das Problem ist jede Suche, die ich über Geschäfte mit der Ausgabe der .__unicode__() und nicht die ganze Darstellung selbst getroffen habe.

Antwort

5

Dafür können Sie eval verwenden; Auch wenn es generell verpönt ist, ist es in diesem Fall akzeptabel.

>>> from urlparse import ParseResult 
>>> s = u"ParseResult(scheme=u'http', netloc=u'www.somedomain.com', path=u'/', params='', query=u'_vsrefdom=googleppc', fragment='')" 
>>> pr = eval(s) 
>>> pr.scheme, pr.netloc 
(u'http', u'www.somedomain.com') 
+0

Schön. Das habe ich gebraucht. Vielen Dank. (Wird als Antwort markieren, wenn genug Zeit vergeht) –