2013-08-22 4 views
2

실제로 동일한 목록에 3 개의 다른 데이터 문자열을 저장하는 코드가 있습니다. 각 목록이 분리되고 난 그래서 난 그냥 코드를 붙여거야 ... 그 감각을 만든 경우도 확실하지 않다 :Python의 JSON을 사용하여 파일에서 특정 목록의 특정 문자열을 검색하는 방법

filename = "datosdeusuario.txt" 
    leyendo = open(filename, 'r+') 
    buffer = leyendo.read() 
    leyendo.close() 
    if not user.name in buffer: 
     escribiendo = open(filename, 'a') 
     escribiendo.write(json.dumps([user.name, string2, string3])+"\n") 
     escribiendo.close() 
     print(str(horaactual)[:19] + ": Data from " + user.name + " added") 

그 코드는 다음과 같은 정보를 저장 (거의 완벽한 작업)한다 :

["saelyth", "thisisanexampleforstring2", "andthisisanexampleforstring3"] 
["anothername", "thisisanothernexampleforstring2", "andthisisanotherexampleforstring3"] 
["John Connor", "exampleforstring2", "exampleforstring3"] 

그래서 내 실제 질문 및 문제는 ... 그 파일에서 특정 문자열을 가져 오는 가장 좋은 방법은 무엇입니까? 예를 들어

,의 내가 첫 번째 문자열, 두 번째 문자열 만 경우는 user.name은 (내 말은, 이름이 목록에서 모든 세 가지 값 John Connor입니다 세 번째 문자열을 검색 할 가정 해 봅시다 녹이다). 인터넷 검색을 수행하는 적절한 방법을 찾지 못하는 것 같습니다. 예상되는 코드는 다음과 같습니다.

if user.name is in found in any list(position1) of the file datosdeusuario.txt 
then 
retrieveddata1 = List where value1 is user.name(get value1) 
retrieveddata2 = List where value1 is user.name(get value2) 
retrieveddata3 = List where value1 is user.name(get value3) 

나는 그 방법을 모릅니다. 그래서 그 상황을 설명하기 위해이 코드를 작성했습니다.

답변

0

어쩌면이 작동합니다 :

retrieveddata1 = retrieveddata2 = retrieveddata3 = None 
filename = "datosdeusuario.txt" 
for line in open(filename, 'r'): 
    retrieved = json.loads(line) 
    if retrieved[0] == 'jonh connor': 
     retrieveddata1 = retrieved[0] 
     retrieveddata2 = retrieved[1] 
     retrieveddata3 = retrieved[2] 
     break 
+0

오, 그래 : D 정확하게 작동합니다. 빠른 답변을 주셔서 대단히 감사합니다, 나는 잠시 붙어있었습니다. – Saelyth

+1

@Saelyth 님이 문제를 해결하면 답변을 수락하는 것이 좋습니다. –

1

나는 이것이 당신이 원하는 경우 확실하지 오전하지만 :

filename = "datosdeusuario.txt" 
f = open(filename,"r") 
filedata = f.read() 
f.close() 
sp1 = filedata.split("\n") 
a = "" 
for x in sp1: 
    if "joao m" in x: 
     a = x 
if(len(a) > 0): 
    sp2 = a.split('"') 
    values = [] 
    for x in sp2: 
     if not(x == ", " or x == "]" or x == "[" or len(x) == 0): 
      values.append(x) 
    print values[0] #should by the name 
    print values[1] #value 2 
    print values[2] #value 3  
else: #No username in the file 
    #do something 
    pass 
+0

:

같은 것을 추가하여 명확하게 코드를 고려해보십시오. 그럼에도 불구하고 나는이 방법으로 테스트 할 것입니다. 무언가를하는 두 가지 방법이 항상 좋은 생각입니다. 감사! – Saelyth

0

난 당신이 데이터를 추출하는 문제에 대한 일반적인 솔루션을 사용하는 것이 좋습니다 JSON 객체, 즉 jsonpath. PyPi는 코드를 통해 읽는 간단하지만 https://pypi.python.org/pypi/jsonpath/

if jsonpath.jsonpath(jsondata,'$[0]') == 'John Connor': 
    result = jsonpath.jsonpath(jsondata,'$[2]') 

예, 파이썬 라이브러리 설명서에 짜증이 라이브러리를 가지고 있으며, JSONPATH 표현식은 다른 구현으로 상당히 잘 설명되어 있습니다. 그러나 브렌트에서 이전의 대답은 이미 내 문제를 해결, 내가이 일을 확인해야

NAME = '$[0]' 
STUFF = '$[1]' 
OTHERSTUFF = '$[2]' 
관련 문제