2013-08-22 62 views
2

我得到的代碼實際上將三個不同的數據字符串保存在同一個列表中。每個列表被分離,我甚至不知道這是有道理的。所以我打算只粘貼代碼:如何使用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考慮接受答案,如果它解決了你的問題。 – 2013-08-22 22:20:43

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]') 

是,對於Python庫文檔吮吸但代碼是直截了當地看一遍,並JSONPATH表達式是由其他執行者記錄的相當好。

考慮通過添加類似使你的代碼更清晰:

NAME = '$[0]' 
STUFF = '$[1]' 
OTHERSTUFF = '$[2]' 
相關問題