1

このリスト構造の .txt ファイルを取得しました。

["saelyth", "somehting here", "Not needed", "2013-08-24 14:14:47"]
["anothername", "whatever 1", "Not needed neither", "2013-08-24 15:12:26"]
["athirdone", "just an example", "of the list structure", "2013-08-24 15:12:51"]

また、値 1 がファイル内に見つかった場合にのみ、特定のリストの 2 番目の値を置き換える必要があります。私が試しているコードはこれですが、これまでのところ、ファイルを置き換えるのではなく、ファイルにデータを追加するだけです。

  horaactual = datetime.datetime.now()
  filename = "datosdeusuario.txt"
  leyendo = open(filename, 'r+')
  buffer = leyendo.read()
  leyendo.close()
  fechitaguardaips = str(horaactual)[:19]
  escribiendo = open(filename, 'r+')
  for line in escribiendo:
    retrieved = json.loads(line)
    if retrieved[0] == user.name:
      retrieveddata1 = "prueba"
      mythirdvalue = "not important"
      escribiendo.write(json.dumps([user.name, retrieveddata1, mythirdvalue, fechitaguardaips])+"\n")
      break
  escribiendo.close()

失敗はescribiendo.writeの行にあると思います。しかし、私は 2 時間グーグルで検索してきましたが、ここまでたどり着きましたが、書き込みや追加の代わりにデータを置換する特定の呼び出しは見つかりませんでした。この問題を解決するにはどうすればよいですか?

これは起こるべきことであり、すべきではありません:(

["saelyth", "prueba", "", "2013-08-27 13:25:14"]
["saelyth", "prueba", "", "2013-08-27 13:25:32"]
["saelyth", "prueba", "", "2013-08-27 13:26:01"]

また、コードから無限ループを停止したいので、Break が何をするのかを理解するのに苦労しました (プログラムの別のセクションで昨日起こりましたが、JSON Python で「X の行」も使用していました)。 .

4

2 に答える 2

0

私のアプローチは次のようなものです (Stack Overflow の質問Loading and parses a JSON file in Pythonへの回答に基づく):

import json

data = []
with open('text.json', 'r+') as f:
    for line in f:
        data_line = json.loads(line)
        if data_line[0] == 'saelyth' and '1' in data_line[1]:
            data_line[1] = 'new value'
        data.append(data_line)
    f.seek(0)
    f.writelines(["%s\n" % json.dumps(i) for i in data])
    f.truncate()

質問の仕方が間違っていた場合は、訂正してください。

に関する質問については、 Python break, continue and pass Statements をbreak確認してください。

于 2013-08-27T15:22:49.947 に答える