一个对象的 Unicode 表示变回一个对象(在 python 中)
Unicode representation of an object back into an object (in python)
仅供参考 - 这是使用 Django 的程序,但我 NOT 将其标记为这样,因为它不是 Django 问题。 django 代码在这里用于 context
~~背景~~
我发现了一个程序错误。简而言之,我正在使用 urlparse.urlparse
从给定的 URI 获取信息并将其保存到数据库中。
目标是做这样的事情:
url = urlparse.urlparse('http://somedomain.com/yada/yada')
some_instance = Domain(address=url.netloc)
~~问题~~
问题是由于编码错误,数据库中充满了urlparse
对象。因此,当从数据库中调用实例时,结果是一个 unicode 字符串:
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='')"
糟糕。
~~问题~~
很明显,我需要返回并修复一些记录。我想知道的是,是否有一种好的 pythonic 方法可以将对象的 unicode 表示(不是实际的 .__unicode__()
return)恢复到对象本身。
想法?
我仔细查看了 Google 和 Whosebug,问题是我遇到的任何搜索都涉及 .__unicode__()
的输出,而不是整个表示本身。
为此,您可以使用 eval
;尽管通常不受欢迎,但在这种情况下是可以接受的。
>>> 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')
仅供参考 - 这是使用 Django 的程序,但我 NOT 将其标记为这样,因为它不是 Django 问题。 django 代码在这里用于 context
~~背景~~
我发现了一个程序错误。简而言之,我正在使用 urlparse.urlparse
从给定的 URI 获取信息并将其保存到数据库中。
目标是做这样的事情:
url = urlparse.urlparse('http://somedomain.com/yada/yada')
some_instance = Domain(address=url.netloc)
~~问题~~
问题是由于编码错误,数据库中充满了urlparse
对象。因此,当从数据库中调用实例时,结果是一个 unicode 字符串:
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='')"
糟糕。
~~问题~~
很明显,我需要返回并修复一些记录。我想知道的是,是否有一种好的 pythonic 方法可以将对象的 unicode 表示(不是实际的 .__unicode__()
return)恢复到对象本身。
想法?
我仔细查看了 Google 和 Whosebug,问题是我遇到的任何搜索都涉及 .__unicode__()
的输出,而不是整个表示本身。
为此,您可以使用 eval
;尽管通常不受欢迎,但在这种情况下是可以接受的。
>>> 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')