2015-01-13 51 views
0

我有我的JSON文件,该文件是:错误而编辑JSON文件与Python

{ 
    "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文件的末尾。最终结局:

{ 
    "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

@Antropic编辑过,只是告诉我你是否需要更多 –

回答

2

你的脚本打开一个文件,从中读取,然后试图回到它的起点,并写入东西到它,取代它的部分内容。但是,如果您正在编写的内容小于文件的原始内容,则这只会覆盖您正在编写的相同数量的数据。

看起来你想在写入文件时完全替换文件的内容。您应该在"r"中打开它以进行初始解析,然后然后关闭它并在"w"中重新打开它以向其写入数据。