2013-10-13 3 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 't обновлено, оно по-прежнему показывает 461 вместо 451, несмотря на то, что все, кажется, работает нормально, и печать действительно знает, что делать без ошибок, информация в файле по-прежнему такая же, как и для e после запуска кода.

Кто-нибудь знает почему?

+1

Вы пытаетесь выполнить 'f.flush()' в конце? –

+1

Попробуйте изменить 'open (" listas \ estadisticas \ Trivial - "+ ...' to 'open (r" listas \ estadisticas \ Trivial - "+ ...', потому что обратные косые черты обычно являются escape-символами в строках, но 'r 'префикс отключает это. – martineau

+0

все еще такая же проблема, попробовал оба – Saelyth

ответ

0

doh я забыл обновить эту тему, но мне удалось найти проблему, так как имя «данных» var создавало проблему, не знаю, почему ... и как только я изменил все это правильно.

1

В моем понимании, вы должны закрыть файл, чтобы иметь обновление данных так, например, у меня есть файл «xyz.txt» в моем диске С:

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

перед запуском x.close(), файл будет пустым.

Примечание:использования два слэша (\\) или поставить «г» перед строкой (r"tes\t"), чтобы предотвратить случайное маскирование.

+0

, не будет ли усечка делать то же самое? – Saelyth

+1

truncate() разрезает части файла (см. здесь: http://docs.python.org/release/2.5. 2/lib/bltin-file-objects.html), но close() обновляет и закрывает доступ к файлу, то есть вам придется повторно открыть файл для редактирования снова. Опять же, это все для моего понимания –

Смежные вопросы