【问题标题】:How to parse random key value pair string in Python?如何在 Python 中解析随机键值对字符串?
【发布时间】:2014-04-08 23:09:11
【问题描述】:

解析这个字符串最有效的方法是什么?

AccountSid=AC03e13571d5434152f33553f6&MessageSid=SM16bbbc0a82847e61200a59d82cc1732b&Body=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZtWUF1MmaMA%26feature%3Dyoutube_gdata_player&ToZip=92707&ToCity=GARDEN+GROVE&FromState=CA&ToState=CA&SmsSid=SM16bbbc0a82847e61200a59d82cc1732b&To=%2B17147866508&ToCountry=US&FromCountry=US&SmsMessageSid=SM16bbbc0a82847e61200a59d82cc1732b&ApiVersion=2010-04-01&FromCity=SANTA+ANA&SmsStatus=received&NumMedia=0&From=%2B17145420218&FromZip=92704

【问题讨论】:

  • urlparse 是您正在寻找的模块。
  • 高效?以及您尝试过哪些低效的方法?
  • 最有效的方法是在汇编中编写一个解析器,并在 C 中编写一个使用它的微型扩展模块。玩得开心!

标签: python regex parsing key-value


【解决方案1】:

使用 urlparse.parse_qs() 解析 URL 编码的键值对。

演示:

>>> import urlparse
>>> inputstr = 'AccountSid=AC03e13571d5434152f33553f6&MessageSid=SM16bbbc0a82847e61200a59d82cc1732b&Body=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZtWUF1MmaMA%26feature%3Dyoutube_gdata_player&ToZip=92707&ToCity=GARDEN+GROVE&FromState=CA&ToState=CA&SmsSid=SM16bbbc0a82847e61200a59d82cc1732b&To=%2B17147866508&ToCountry=US&FromCountry=US&SmsMessageSid=SM16bbbc0a82847e61200a59d82cc1732b&ApiVersion=2010-04-01&FromCity=SANTA+ANA&SmsStatus=received&NumMedia=0&From=%2B17145420218&FromZip=92704'
>>> from pprint import pprint
>>> pprint(urlparse.parse_qs(inputstr))
{'AccountSid': ['AC03e13571d5434152f33553f6'],
 'ApiVersion': ['2010-04-01'],
 'Body': ['https://www.youtube.com/watch?v=ZtWUF1MmaMA&feature=youtube_gdata_player'],
 'From': ['+17145420218'],
 'FromCity': ['SANTA ANA'],
 'FromCountry': ['US'],
 'FromState': ['CA'],
 'FromZip': ['92704'],
 'MessageSid': ['SM16bbbc0a82847e61200a59d82cc1732b'],
 'NumMedia': ['0'],
 'SmsMessageSid': ['SM16bbbc0a82847e61200a59d82cc1732b'],
 'SmsSid': ['SM16bbbc0a82847e61200a59d82cc1732b'],
 'SmsStatus': ['received'],
 'To': ['+17147866508'],
 'ToCity': ['GARDEN GROVE'],
 'ToCountry': ['US'],
 'ToState': ['CA'],
 'ToZip': ['92707']}

【讨论】:

    【解决方案2】:

    使用urlparse.parse_qs:

    >>> import urlparse
    >>> s = "AccountSid=AC03e13555434152f33553f6&MessageSid=SM16bbbc0a82847e61200a59d82cc1732b&Body=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZtWUF1MmaMA%26feature%3Dyoutube_gdata_player&ToZip=92707&ToCity=GARDEN+GROVE&FromState=CA&ToState=CA&SmsSid=SM16bbbc0a82847e61200a59d82cc1732b&To=%2B17147866508&ToCountry=US&FromCountry=US&SmsMessageSid=SM16bbbc0a82847e61200a59d82cc1732b&ApiVersion=2010-04-01&FromCity=SANTA+ANA&SmsStatus=received&NumMedia=0&From=%2B17145420218&FromZip=92704"
    >>> urlparse.parse_qs(s)
    {'Body': ['https://www.youtube.com/watch?v=ZtWUF1MmaMA&feature=youtube_gdata_player'], 'MessageSid': ['SM16bbbc0a82847e61200a59d82cc1732b'], 'FromZip': ['92704'], 'SmsStatus': ['received'], 'FromCountry': ['US'], 'FromCity': ['SANTA ANA'], 'ApiVersion': ['2010-04-01'], 'To': ['+17147866508'], 'From': ['+17145420218'], 'NumMedia': ['0'], 'ToZip': ['92707'], 'ToCountry': ['US'], 'ToState': ['CA'], 'AccountSid': ['AC03e13571dbc3a33555434152f33553f6'], 'SmsSid': ['SM16bbbc0a82847e61200a59d82cc1732b'], 'ToCity': ['GARDEN GROVE'], 'FromState': ['CA'], 'SmsMessageSid': ['SM16bbbc0a82847e61200a59d82cc1732b']}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2013-05-18
      • 2023-04-06
      相关资源
      最近更新 更多