2014-08-29 199 views
0

我有一串Unicode字符串,我正在尋找一種最快捷的方式從字符串中提取值。python Unicode字符串拆分/ json轉換

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 

或者,有沒有辦法在python中使用json來處理它。

+0

什麼樣的容器容納「串」串?一個列表?一個文本文件?還有別的嗎? – 2014-08-29 13:41:07

+0

一次的字符串數量與示例類似,但我有大約50個字段。 – hashmuke 2014-08-29 13:54:14

回答

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

如果你想獲得的數據名稱:,學校名稱:等

我會用字典和分割數據,將其插入。因此,代碼會是這個樣子

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

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

那麼你可以參考的信息的數據,像這樣:

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

編輯:沒有for循環

,你可以,根據你正在尋找哪個領域,這樣做:

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

我擁有的數據很長。基本上,我想避免pyhton中的for循環 - 如果可能的話。 – hashmuke 2014-08-29 13:39:49

+1

檢查我的編輯我認爲這將工作的領域是你正在尋找的領域 – QuinnFTW 2014-08-29 13:43:51

+0

仍然我需要遍歷字段。我無法測試第一個答案,你有沒有考慮data1中的第三行? – hashmuke 2014-08-29 14:33:17

0

與@QuinnFTW類似,我會創建一個字典,但我更喜歡字典理解for循環。一旦你在字典中的數據,可以用json.dumps轉換成JSON容易:

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"}