簡體   English   中英

Python 2.7解析數據

[英]Python 2.7 parsing data

我有如下數據:

data = 'somekey:value4thekey&second-key:valu3-can.be?anything&third_k3y:it%can have spaces;too'

以一種人類易於理解的方式,它看起來像這樣:

somekey    : value4thekey
second-key : valu3-can.be?anything
third_k3y  : it%can have spaces;too

我應該如何解析數據,以便在執行data['somekey']會得到>>> value4thekey

注意: &所有不同的項目

我目前如何處理

當前,我使用這個丑陋的解決方案:

all = data.split('&')
for i in all:
    if i.startswith('somekey'):
        print i

由於多個明顯的限制,該解決方案非常糟糕。 如果我能以某種方式將其解析為python樹對象,那就更好了。

我用&分割字符串以獲取鍵值字符串列表,然后用:分割每個字符串以獲取鍵值對。 實際上,使用dict和list的理解使這很優雅:

result = {k:v for k, v in (part.split(':') for part in data.split('&'))}

您可以直接解析你的數據字典-分裂的項目分離&再上鍵,值分隔再次分裂:

table = {
    key: value for key, value in 
    (item.split(':') for item in data.split('&'))
}

這使您可以直接訪問元素,例如,作為table['somekey']

如果值中沒有對象,則可以將其解析為字典

structure = {}

for ele in data.split('&'):
    ele_split = ele.split(':')
    structure[ele_split[0]] = ele_split[1]

現在,您可以使用結構來獲取值:

print structure["somekey"]
#returns "value4thekey"

由於鍵具有“鍵”:“值”形式的通用格式。 您可以將其用作分割參數。

for i in x.split("&"):
      print(i.split(":"))

這將生成一個偶數項數組,其中每個偶數索引都是鍵,奇數索引是值。 遍歷數組並將其加載到字典中。 你應該很好!

我將數據格式化為YAML並解析YAML

import re
import yaml

data = 'somekey:value4thekey&second-key:valu3-can.be?anything&third_k3y:it%can have spaces;too'
yaml_data = re.sub('[:]', ': ', re.sub('[&]', '\n', data ))
y = yaml.load(yaml_data)
for k in y:
        print "%s : %s" % (k,y[k])

這是輸出:

third_k3y : it%can have spaces;too
somekey : value4thekey
second-key : valu3-can.be?anything

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM