繁体   English   中英

寻找将URL编码的字符串解析为元组的Python速记方法

[英]Looking for a Python shorthand way of parsing a url encoded string into tuples

我有一个字符串rssi=199&phase=-1&doppler=-1 ,我试图将其解析为[('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]使用Python。

目前,我有一个可以执行我想要的功能的工作。 它是这样的:

s = 'rssi=199&phase=-1doppler=-1'
spl = s.split('&') # now looks like ['rssi=199', 'phase=-1', 'doppler=-1']
l = []
for i in spl:
    l.append(tuple(i.split('=')))
print l # finally have [('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

我正在寻找一种更短的方法以更少的行数来完成此任务。 只是为了了解如何清理代码并获得最佳实践。 我已经看过python中的操作,它们看起来像[ x.strip() for x in foo.split(";") if x.strip() ]具有数组内的for循环。 我不完全了解它做什么,也不知道它叫什么。 任何在正确方向上的帮助将不胜感激。

您要询问的结构称为列表理解 您可以将for循环替换for

[v.split('=') for v in s.split('&')]

这会给你一个清单,像:

[['rssi', '199'], ['phase', '-1'], ['doppler', '-1']]

但是对于您正在做的事情, urlparse.parse_qs方法可能更简单:

>>> import urlparse
>>> urlparse.parse_qs('rssi=199&phase=-1&doppler=-1')
{'phase': ['-1'], 'rssi': ['199'], 'doppler': ['-1']}

...或urlparse.parse_qsl ,如果您确实想要列表/元组而不是字典:

>>> urlparse.parse_qsl('rssi=199&phase=-1&doppler=-1')
[('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

您正在寻找urlparse.parse_qsl

>>> import urlparse
>>> urlparse.parse_qsl("foo=bar&bar=baz")
[('foo', 'bar'), ('bar', 'baz')]

将其转换为字典也可能会有所帮助:

>>> dict(urlparse.parse_qsl("foo=bar&bar=baz"))
{'foo': 'bar', 'bar': 'baz'}

我假设您以URL开头,分割为? 并删除了主机和路径,现在正尝试解析查询字符串。 您可能要从一开始就使用urlparse

import urlparse

parsed = urlparse.urlparse('http://www.bob.com/index?rssi=199&phase=-1&doppler=-1')
print parsed.hostname + parsed.path 
# www.bob.com/index

query_tuples = urlparse.parse_qsl(parsed.query)
print query_tuples 
# [('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM