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 时,我才需要替换特定列表的第二个值。我正在尝试的代码是这个,但到目前为止,它只是将数据附加到文件而不是替换它。

  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 行中。然而,我已经用谷歌搜索了两个小时,我确实做到了这一点,但我没有找到替换数据而不是写入或附加的特定调用。我该如何解决这个问题?

这就是发生的事情,不应该:(

["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 中使用“For line in X”) .

4

2 回答 2

0

这是一个示例,您可以根据需要进行调整:

from contextlib import nested

filename = 'datosdeusuario.txt'
with nested( open(filename,'r'),open(filename,'w') ) as f1,f2:
    for line in f1:
        f2.write(line.replace('foo','bar'))

这将在您的文件中用bar替换子字符串foo的每个实例,即使它确实打开了两次文件。

于 2013-08-27T12:32:22.433 回答
0

我的方法是这样的(基于对 Stack Overflow 问题Loading and parsing 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()

如果我以错误的方式提出您的问题,请纠正我。

关于您的问题break,请检查Python break、continue 并通过 Statements

于 2013-08-27T15:22:49.947 回答