スペイン語のコードで申し訳ありませんが、それ以外に、その構造を理解できるはずです。私は Python 3.3.2 を使用しており、ここで問題が発生しています。
leyendoestadisticas = open("listas\Estadisticas.txt", "r")
bufferestadisticas = leyendoestadisticas.read()
leyendoestadisticas.close()
if not '"'+user.name+'"' in bufferestadisticas: #If name is not found, do this
escribiendoestadisticas = open("listas\Estadisticas.txt", 'a')
escribiendoestadisticas.write(json.dumps([user.name, palabrasdelafrase, letrasdelafrase,
"1", user.nameColor, user.fontColor, user.fontFace, user.fontSize, message.body, room.name])+"\n")
escribiendoestadisticas.close()
else: #If name is found...
data = []
with open('listas\Estadisticas.txt', 'r+') as f:
for line in f:
data_line = json.loads(line)
if data_line[0] == user.name: #if name matches...
if data_line[9] == room.name: #And room also, then update info.
data_line[1] = int(data_line[1])+int(palabrasdelafrase)
data_line[2] = int(data_line[2])+int(letrasdelafrase)
data_line[3] = int(data_line[3])+1
data_line[4] = user.nameColor
data_line[5] = user.fontColor
data_line[6] = user.fontFace
data_line[7] = user.fontSize
data_line[8] = message.body
data_line[9] = room.name
else: #but if name is found and room doesn't matches. #PROBLEM HERE
escribiendoestadisticas = open("listas\Estadisticas.txt", 'a')
escribiendoestadisticas.write(json.dumps([user.name, palabrasdelafrase, letrasdelafrase,
"1", user.nameColor, user.fontColor, user.fontFace, user.fontSize, message.body, room.name])+"\n")
escribiendoestadisticas.close()
data.append(data_line)
break
f.seek(0)
f.writelines(["%s\n" % json.dumps(i) for i in data])
f.truncate()
その目的は、行のプロパティ 9 が一致する限り、user.name を追加してその情報を更新することです。一致しない場合は、同じ user.name でプロパティ 9 の新しい値を持つ新しい行をリストに追加します。
プロパティ 9 が一致する場合は完全に機能しますが、一致しない場合は、その user.name の既存の値を上書きし、[1]、[2]、および [3] のプロパティを最初からカウントし始めます。
助けてくれてありがとう。
編集:回答からの情報で更新:
else:
data = []
with open('listas\Estadisticas.txt', 'r+') as f:
lines = f.readlines()
for line in lines:
data_line = json.loads(line)
if data_line[0] == user.name:
if data_line[9] == room.name:
data_line[1] = int(data_line[1])+int(palabrasdelafrase)
data_line[2] = int(data_line[2])+int(letrasdelafrase)
data_line[3] = int(data_line[3])+1
data_line[4] = user.nameColor
data_line[5] = user.fontColor
data_line[6] = user.fontFace
data_line[7] = user.fontSize
data_line[8] = message.body
data_line[9] = room.name
data.append(data_line)
f.seek(0)
f.writelines(["%s\n" % json.dumps(i) for i in data])
f.truncate()
for line in lines:
data_line = json.loads(line)
if data_line[0] == user.name:
if not data_line[9] == room.name:
escribiendoestadisticas = open("listas\Estadisticas.txt", 'a')
escribiendoestadisticas.write(json.dumps([user.name, palabrasdelafrase, letrasdelafrase,
"1", user.nameColor, user.fontColor, user.fontFace, user.fontSize, message.body, room.name])+"\n")
escribiendoestadisticas.close()
しかし、今はエラーが発生しています: ValueError: I/O operation on closed file. 完全に失われました。