2016-08-10 2 views
-4

다음은 큰 목록 인 1 줄 형식의 예입니다.이 줄을 한 줄에 하나씩 저장하여 가독성을 높였습니다.파이썬의 목록에서 특정 필드를 추출하는 방법

['{activities:[{activity:121,dbCount:234,totalHits:4,query:Identification', 'and', 'prioritization', 'of', 'merozoite,searchedFrom:PersistentLink,searchType:And,logTime:1469765823000},{activity:115,format:HTML,searchTerm:Identification', 'and', 'prioritization', 'of', 'merozoite,mode:View,type:Abstract,shortDbName:cmedm,pubType:Journal', 'Article,isxn:15506606,an:23776179,title:Journal', 'Of', 'Immunology', '(Baltimore,', 'Md.:', '1950),articleTitle:Identification', 'and', 'prioritization', 'of', 'merozoite', 'antigens', 'as', 'targets', 'of', 'protective', 'human', 'immunity', 'to', 'Plasmodium', 'falciparum', 'malaria', 'for', 'vaccine', 'and', 'biomarker', 'development.,logTime:1469765828000}],session:-2147364846,customerId:s2775460,groupId:main,profileId:eds}'] 

이 줄에서부터 4 필드를 추출 할 수 있기를 원합니다. 즉, "쿼리", "an", "shortDbName"및 "profileId"

모든 아이디어 양식은 대단히 감사하겠습니다. 대단히 감사합니다.

+2

형식 그래서 우리는 제발 이해할 수있는 코드. – Harrison

+1

당신의'''사용은 의심스러워 보입니다 - 이건 ['{{{활동 : 121, dbCount : 234, totalHits : 4, query : Identification ' – Craicerjack

답변

0

라인이 매우 이상하게 보입니다. 그러나, 당신이 쿼리의 값을 분석하기 위해 다음과 같이 뭔가를 할 수있는 'mystring에'라는 하나의 문자열 변수에 라인을 저장 가정하면

query = mystring[mystring.find("query:"):mystring.find("searchedFrom:")] 

이 생산하는 것 : 그래서

query:Identification', 'and', 'prioritization', 'of', 'merozoite, 
+1

'str','list','set','id'와 같은 변수 이름을 사용합니다. 내장형/함수 용 예약어이기 때문에 나쁜 습관입니다. – ailin

+0

아, 그래, 내 잘못 – bdvll

0

, 나는 몇 가지 변경 사항을 작성하고 여기에 원하는 필드 쿼리를 얻기 위해 코드를 사용했지만, 한꺼번에 4 개의 필드를 모두 원한다면 어떻게해야합니까?

mystring = ['{activities:[{activity:121,dbCount:234,totalHits:4,query:Identification', 'and', 'prioritization', 'of', 'merozoite,searchedFrom:PersistentLink,searchType:And,logTime:1469765823000},{activity:115,format:HTML,searchTerm:Identification', 'and', 'prioritization', 'of', 'merozoite,mode:View,type:Abstract,shortDbName:cmedm,pubType:Journal', 'Article,isxn:15506606,an:23776179,title:Journal', 'Of', 'Immunology', '(Baltimore,', 'Md.:', '1950),articleTitle:Identification', 'and', 'prioritization', 'of', 'merozoite', 'antigens', 'as', 'targets', 'of', 'protective', 'human', 'immunity', 'to', 'Plasmodium', 'falciparum', 'malaria', 'for', 'vaccine', 'and', 'biomarker', 'development.,logTime:1469765828000}],session:-2147364846,customerId:s2775460,groupId:main,profileId:eds}'] 
sanitizedmystring = str(mystring).replace('"', '') 
print sanitizedmystring 
query = sanitizedmystring[sanitizedmystring.find('query:'):sanitizedmystring.find('searchedFrom:')] 
print query 
+0

에서 코드 형식을 사용하십시오 귀하의 게시물. – ospahiu

0

사용하여 다음과 같은 정규식 - 우리는이 분야에서 키/값을 쌍을 캡처 할 수 있어야합니다>(query|an|dbCount|shortDbName|profileId):([A-Za-z0-9]*). 이 단어는 앞에서 언급 한 키워드 중 : (을 캡처하지 못함)과 대문자/소문자가 포함 된 콜론 다음의 문자열과 일치해야합니다. 그런 다음 태그 당 발견 된 모든 결과를 사전 (key : [list of tags found])에 추가합니다.

import re 
from collections import defaultdict 

def extract_fields(l): 
    queries = [] 
    d = defaultdict(list) 
    regex = r"(query|an|dbCount|shortDbName|profileId):([A-Za-z0-9]+)" 

    for line in l: 
     query = re.findall(regex, line) 
     for match in query: 
      queries.append(match) 
    for item in queries: 
     d[item[0]].append(item[1]) 

    return d 

샘플 출력 :

l=['{activities:[{activity:121,dbCount:234,totalHits:4,query:Identification', 'and', 'prioritization', 'of', 'merozoite,searchedFrom:PersistentLink,searchType:And,logTime:1469765823000},{activity:115,format:HTML,searchTerm:Identification', 'and', 'prioritization', 'of', 'merozoite,mode:View,type:Abstract,shortDbName:cmedm,pubType:Journal', 'Article,isxn:15506606,an:23776179,title:Journal', 'Of', 'Immunology', '(Baltimore,', 'Md.:', '1950),articleTitle:Identification', 'and', 'prioritization', 'of', 'merozoite', 'antigens', 'as', 'targets', 'of', 'protective', 'human', 'immunity', 'to', 'Plasmodium', 'falciparum', 'malaria', 'for', 'vaccine', 'and', 'biomarker', 'development.,logTime:1469765828000}],session:-2147364846,customerId:s2775460,groupId:main,profileId:eds}'] 

print extract_fields(l) 
>>> defaultdict(<type 'list'>, {'query': ['Identification'], 
'shortDbName': ['cmedm'], 'dbCount': ['234'], 'profileId': ['eds'], 'an': 
['23776179']}) 
+0

실제 검색어 입력란은 [Identification ','and ','prioritization ','of '등의 정보를 추출해야하지만'Identification '이 나오면' '메로 조이 트'] –

관련 문제