2

3 つの異なるデータ文字列を同じリストに実際に保存するコードを取得しました。各リストは区切られており、それが意味をなすかどうかさえわかりません...コードを貼り付けます。

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

だから私の実際の質問と問題は...そのファイルから特定の文字列を取得する最良の方法は何ですか?

たとえば、最初の文字列、2 番目の文字列、3 番目の文字列のうち、user.name が(つまり、名前が見つかったリストの 3 つの値すべて)の場合にのみ取得したいとします。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 に答える