2015-01-13 7 views
0

У меня есть файл в формате JSON, который:Ошибка при редактировании файла JSON с питоном

{ 
    "DIR": "/home/yabir/code", 
    "DISK": [ 
     "/home/yabir/back", 
     "455G", 
     "8,6G", 
     "423G", 
     "2%", 
     "/home/yabir/back" 
    ], 
    "FIRST": false, 
    "last": "13012015_222441", 
    "last_save": [ 
     "/home/yabir/code/pygame/puzzle.py", 
     "/home/yabir/code/pygame/memorypuzzle.py", 
     "/home/yabir/code/pygame/Project", 
     "A/elementos.xcf", 
     "/home/yabir/code/clank/src/database.py", 
     "/home/yabir/code/clank/src/engine.py", 
     "/home/yabir/code/clank/src/pruebas.py", 
     "/home/yabir/code/clank/src/.git/hooks/applypatch-msg.sample", 
     "/home/yabir/code/clank/src/.git/hooks/post-update.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-applypatch.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-rebase.sample", 
     "/home/yabir/code/clank/src/.git/hooks/commit-msg.sample", 
     "/home/yabir/code/clank/src/.git/hooks/update.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-commit.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-push.sample", 
     "/home/yabir/code/clank/src/.git/hooks/prepare-commit-msg.sample", 
     "/home/yabir/code/clank/src/.git/HEAD", 
     "/home/yabir/code/clank/src/.git/info/exclude", 
     "/home/yabir/code/clank/src/.git/config", 
     "/home/yabir/code/clank/src/.git/description", 
     "/home/yabir/code/clank/src/xml2json.py", 
     "/home/yabir/code/clank/src/LICENSE", 
     "/home/yabir/code/clank/src/main.py", 
     "/home/yabir/code/clank/src/save.json", 
     "/home/yabir/code/clank/src/main.pyc", 
     "/home/yabir/code/clank/src/disks_manager.py", 
     "/home/yabir/code/clank/src/xml2json.pyc", 
     "/home/yabir/code/clank/src/structure.py" 
    ] 
} 

но когда я

data["last_save"] = cmd_decoded 
data["last"] = now 
json_data.seek(0) 
json_data.write(json.dumps(data,sort_keys=True,indent=4, separators=(',', ': '))) 

где cmd_decoded это список строк, как в файле JSon раньше " last_save». Он правильно заменяет «последнее» значение, но на данный момент для изменения «last_save» вместо этого python просто добавляет в конец json-файла после окончательного }. Окончательный resut:

{ 
    "DIR": "/home/yabir/code", 
    "DISK": [ 
     "/home/yabir/back", 
     "455G", 
     "8,6G", 
     "423G", 
     "2%", 
     "/home/yabir/back" 
    ], 
    "FIRST": false, 
    "last": "13012015_222512", 
    "last_save": [ 
     "/home/yabir/code/pygame/puzzle.py", 
     "/home/yabir/code/pygame/memorypuzzle.py", 
     "/home/yabir/code/pygame/Project", 
     "A/elementos.xcf", 
     "/home/yabir/code/clank/src/database.py", 
     "/home/yabir/code/clank/src/engine.py", 
     "/home/yabir/code/clank/src/pruebas.py", 
     "/home/yabir/code/clank/src/.git/hooks/applypatch-msg.sample", 
     "/home/yabir/code/clank/src/.git/hooks/post-update.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-applypatch.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-rebase.sample", 
     "/home/yabir/code/clank/src/.git/hooks/commit-msg.sample", 
     "/home/yabir/code/clank/src/.git/hooks/update.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-commit.sample", 
     "/home/yabir/code/clank/src/.git/hooks/pre-push.sample", 
     "/home/yabir/code/clank/src/.git/hooks/prepare-commit-msg.sample", 
     "/home/yabir/code/clank/src/.git/HEAD", 
     "/home/yabir/code/clank/src/.git/info/exclude", 
     "/home/yabir/code/clank/src/.git/config", 
     "/home/yabir/code/clank/src/.git/description", 
     "/home/yabir/code/clank/src/xml2json.py", 
     "/home/yabir/code/clank/src/save.json", 
     "/home/yabir/code/clank/src/disks_manager.py", 
     "/home/yabir/code/clank/src/xml2json.pyc" 
    ] 
}/code/clank/src/main.pyc", 
     "/home/yabir/code/clank/src/disks_manager.py", 
     "/home/yabir/code/clank/src/xml2json.pyc", 
     "/home/yabir/code/clank/src/structure.py" 
    ] 
} 

которым должен быть в «last_save», и «last_save» еще будучи как перед запуском сценария. Почему json-файл не изменяется правильно?

В begginig моего файла у меня есть:

json_data = open('save.json', "r+") 
data = json.load(json_data) 

И в конце:

json_data.close() 
+0

показать код, в котором вы открываете файл, а также пример того, что было сохранено, неясно, что вы имеете в виду. – Anentropic

+0

@ Антенология Отредактировано, просто скажите, нужно ли вам что-нибудь еще –

ответ

2

Ваш скрипт открывает файл, читает из него, а затем стремится вернуться к его началу и пишет вещи к нему, заменяя части его содержимого по мере его появления. Однако, если то, что вы пишете, меньше, чем исходное содержимое файла, это только перезапишет тот же объем данных, который вы пишете.

Похоже, вы хотите полностью заменить содержимое файла при записи на него. Вы должны открыть его в "r" для начального разбора, , затем закройте его и откройте его в "w", чтобы записать данные на него.

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