2014-08-29 4 views
0

У меня есть группа строк Unicode, и я ищу быстрый способ извлечь значения из строки.python Unicode string splitting/to json conversion

In [161]: data1 = u'NAME: abc\nSchool Name: CD\n________________\nENG: B \nMat: B ' 
In [162]: print data1 
NAME: abc 
School Name: CD 
________________ 
ENG: B 
Mat: B 

В качестве альтернативы, есть способ обработать его с помощью json в python.

+0

В каком контейнере хранится «связка» строк? Список? Текстовый файл? Что-то другое? –

+0

Число строк за один раз похоже на пример, но у меня есть около 50 полей. – hashmuke

ответ

0

Я следующее решение работает.

data1 = u'NAME: abc\nSchool Name: CD\n________________\nENG: B \nMat: B ' 

import re 
from itertools import izip 
data2 = re.split(r'[:\n________________]+',data1) 
i = iter(data2) 
ans = dict(izip(i, i)) 
0

Если вы пытаетесь получить данные для NAME :, Название школы :, и т.д.

Я хотел бы использовать словарь и разделить данные, чтобы вставить ее. Таким образом, код будет выглядеть примерно как этот

data=data1.split("\n") 
info={} 

for d in data: 
    info[d.split(":")[0]]=d.split(":")[1] 

Затем вы можете ссылаться на информацию для данных следующим образом:

info["NAME"], info["School Name"] 

т.д.

EDIT: нет цикл

Вы могли бы, на основании которого вы ищите, сделайте это:

info=data1.split(field)[1].split("\n")[0] 
+0

Данные, которые у меня есть, длинны. В принципе, я хочу избежать цикла for в pyhton - возможно. – hashmuke

+1

проверить мое редактирование, я думаю, что будет работать там, где поле - это поле, которое вы ищете – QuinnFTW

+0

Тем не менее мне требуется прокручивать поля. Я не могу проверить первый ответ, считали ли вы третью строку в data1? – hashmuke

0

Аналогично @QuinnFTW, я бы создал диктофон, но я предпочитаю, чтобы подходы к ошибкам для циклов. Если у вас есть данные в Словаре, вы можете конвертировать в формат JSON легко с json.dumps:

data1 = u'NAME: abc\nSchool Name: CD\n________________\nENG: B \nMat: B ' 

data1 = dict((item.strip() 
       for item in line.split(':',1)) 
      for line in data1.splitlines() 
      if ':' in line) 

from pprint import pprint 
pprint(data1) 

import json 
print json.dumps(data1) 

Результат:

{u'ENG': u'B', u'Mat': u'B', u'NAME': u'abc', u'School Name': u'CD'} 
{"Mat": "B", "NAME": "abc", "School Name": "CD", "ENG": "B"}