Анализ данных Python 2.7 - PullRequest
       4

Анализ данных Python 2.7

0 голосов
/ 29 сентября 2018

У меня есть данные, которые выглядят так:

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

Это решение очень плохое из-за множества очевидных ограничений.Было бы намного лучше, если бы я мог как-то разобрать его в объект дерева питона.

Ответы [ 5 ]

0 голосов
/ 29 сентября 2018

Я бы отформатировал данные в 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
0 голосов
/ 29 сентября 2018

Поскольку ключи имеют общий формат в виде «ключ»: «значение».Вы можете использовать его в качестве параметра для разделения.

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

Это создаст массив четных элементов, где каждый четный индекс является ключом, а нечетный индекс является значением.Переберите массив и загрузите его в словарь.Вы должны быть хорошими!

0 голосов
/ 29 сентября 2018

Вы можете анализировать данные напрямую в словарь - разделить на разделитель элементов &, а затем снова разделить на ключ, разделитель значений ::

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

Это позволяет вам получить прямой доступ к элементамНапример, как table['somekey'].

0 голосов
/ 29 сентября 2018

Если у вас нет объектов внутри значения, вы можете проанализировать его в словаре

structure = {}

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

Теперь вы можете использовать структуру для получения значений:

print structure["somekey"]
#returns "value4thekey"
0 голосов
/ 29 сентября 2018

Я бы разделил строку на &, чтобы получить список строк ключ-значение, а затем разделил каждую такую ​​строку на :, чтобы получить пары ключ-значение.Использование dict и списочных представлений на самом деле делает это довольно элегантно:

result = {k:v for k, v in (part.split(':') for part in data.split('&'))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...