2013-10-13 55 views
0

我得到这个功能:为什么不更新文件?

def restapuntos(precio, usuario ,saladondeocurre): 
    print("Function started") 
    data = [] 
    with open("listas\estadisticas\Trivial-"+saladondeocurre+".txt", "r+") as f: 
     for line in f: 
     data_line = json.loads(line) 
     if data_line[0] == usuario: 
      print("User: "+user.name+", removing "+str(precio)+" from "+str(data_line[1])) 
      data_line[1] = data_line[1]-precio 
     data.append(data_line) 
     f.seek(0) 
     f.writelines(["%s\n" % json.dumps(i) for i in data]) 
     f.truncate() 
    print("Function has been used") 

被称为有:

Myclass.restapuntos(10, user.name, room.name) 

而且3个打印告诉我:

Function started 
User: saelyth, removing 10 from 461 
Function has been used 

但这里有一个问题:文件WASN没有更新,它仍然显示461而不是451,尽管这一切都似乎工作正常,并且打印实际上知道该怎么做没有错误,但该文件中的信息仍然与befor e在我运行代码之后。

任何人都知道为什么?

+1

你有没有在最后尝试'f.flush()'? –

+1

尝试更改'open(“listas \ estadisticas \ Trivial - ”+ ...'到'open(r“listas \ estadisticas \ Trivial - ”+ ...'因为反斜杠通常是字符串中的转义字符,但'r '前缀关闭。 – martineau

+0

仍然是相同的问题,都尝试过 – Saelyth

回答

0

doh我忘了更新这个线程,但我设法找到问题,不知何故var的“数据”的名称是创建一个问题,不知道为什么......只要我改变了一切对。

1

据我了解,你必须关闭文件,以便有数据更新,以便例如,我有一个文件“xyz.txt将该”在我的C盘:

x = open("C:\\xyz.txt", "r+") 
x.read() 
x.write("test") 
x.close() 

运行x.close()之前,该文件将是空的。

注:使用两个反斜杠(\\)或字符串(r"tes\t"),以防止意外转义代码前加上 “R”。

+0

不会截断相同吗? – Saelyth

+1

truncate()截断部分文件(请参阅:http://docs.python.org/release/2.5。 2/lib/bltin-file-objects.html),但关闭()更新并关闭对文件的访问,这意味着您将不得不重新打开文件以再次编辑。 –

相关问题