我正在尝试对从文本文件生成的URL进行反向拆分,并在打印该拆分值时遇到上述错误。我已经尝试从URL中创建一个字符串并将其拆分,但这会导致GUI完全冻结,甚至不会产生错误消息。我的代码在这里:
a = URLS.rsplit('=', 1)
我尝试从URL解析字符串时使用的代码然后拆分在此处:
urlstr = str(URLS)
a = urlstr.rsplit('=', 1)
print(a)
任何人都可以告诉我为什么我不能使用split方法拆分URL(URLS是在字典中定义的)和/或为什么要创建一个字符串然后拆分它不起作用?
由于
答案 0 :(得分: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]
答案 1 :(得分:1)
dict_values
对象是一个序列。尽管有rsplit
个对象,但它没有str
方法。
但实际上,您可能应该使用urllib.parse从网址中提取信息,而不是使用rsplit
。
例如,
>>> 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将允许您正确取消引用百分比编码的查询字符串,并控制空值的解析。