AttributeError: 'dict_values'对象没有'rsplit'属性
我正在尝试对从文本文件生成的URL进行反向拆分,但在打印拆分后的值时遇到了上面的错误。我试过把URL变成一个字符串再进行拆分,但这样会导致图形界面完全卡住,甚至连错误信息都不显示。我的代码在这里:
a = URLS.rsplit('=', 1)
我在尝试从URL解析出一个字符串然后进行拆分时使用的代码在这里:
urlstr = str(URLS)
a = urlstr.rsplit('=', 1)
print(a)
有没有人能告诉我为什么我不能用拆分方法来处理这个URL(这些URL是在一个字典里定义的),或者为什么创建一个字符串后再拆分也不行?
谢谢
2 个回答
1
dict_values
对象是一种序列。它没有rsplit
这个方法,但str
对象是有的。
其实,和其使用rsplit
相比,你更应该使用urllib.parse来从你的网址中提取信息。
比如说,
>>> import urllib.parse as parse
>>> url = 'http://stackoverflow.com/questions?x=foo&y=bar'
>>> parse.urlsplit(url)
SplitResult(scheme='http', netloc='stackoverflow.com', path='/questions', query='x=foo&y=bar', fragment='')
>>> parse.urlsplit(url).query
'x=foo&y=bar'
>>> parse.parse_qs(parse.urlsplit(url).query)
{'x': ['foo'], 'y': ['bar']}
所以,如果URLS是一个字典,你可以通过循环它的值来提取参数值,使用
>>> URLS = {'a': 'http://stackoverflow.com/questions?x=foo&y=bar'}
>>> for url in URLS.values():
... print(parse.parse_qs(parse.urlsplit(url).query))
...
{'x': ['foo'], 'y': ['bar']}
与rsplit
不同,parse_qs可以让你正确地解码百分号编码的查询字符串,并且可以控制空值的解析。
3
这个错误提示说明 URLS
不是一个字符串,而是一个 dict_values
对象。我想这是你在调用字典的 values
方法时得到的结果(在 Python 3 中)。这个值的视图是一个可迭代的对象,所以你可能想要对它进行循环处理,可以用类似下面的方式:
for url in URLS:
a = url.rsplit("=", 1)
# do stuff with a here
或者如果你想要得到各种 a
值的列表,你可以使用列表推导式:
a_lst = [url.rsplit("=", 1) for url in URLS]