2

我得到的代码实际上将三个不同的数据字符串保存在同一个列表中。每个列表都是分开的,我什至不确定这是否有意义......所以我将粘贴代码:

    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)

我不知道该怎么做。这就是为什么我只是编造了代码来解释这种情况。

4

3 回答 3

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
于 2013-08-22T21:54:54.670 回答
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
于 2013-08-22T21:55:30.733 回答
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]'
于 2015-01-17T20:03:49.763 回答