python json dump writability “not write able”

别来无恙 提交于 2019-12-08 05:57:33

问题


So this is the second piece of a problem with my program, but a completely different issue, thanks to the helpful person who suggested JSON as a better method to do what I wanted....

Anyway...

some success with JSON. The program also changed theme, I definitely am not tying to make a game, just get the inspiration to learn more about the concept of "saving" in python.. so here's my code so far, with a valid JSON coded file to read from.. but I ran into another snag, it reports this error when I try to use the JSON 's .dump method

Error:

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<string>", line 32, in <module>
File "/data/data/com.hipipal.qpy3/files/lib/python3.2/python32.zip/json/__init__.py", line 177, in dump
io.UnsupportedOperation: not writable

Code:

import os
import random
import json
with open("/storage/emulated/0/com.hipipal.qpyplus/scripts3/newgame2.txt") as data_file:
    data = json.load(data_file) 
save=data
print(save)
hero=dict(save)
print(hero)
level=int(0) 
job=str("none")
experience=int(0)
strength=int(0)
intelligence=int(0)
dexterity= int(0)
health= int(0)
magic= int(0)
luck= int(0)
if hero["level"]==0:
    level=int(0)
    job=str("none")
    experience=int(0)
    strength=int(0)
    intelligence=int(0)
    dexterity= int(0)
    health= int(0)
    magic= int(0)
    luck= int(0)
    hero=[("level",level), ("job",job), ("experience",experience), ("strength",strength), ("intelligence",intelligence), ("dexterity",dexterity), ("health",health), ("magic",magic), ("luck",luck)]
    hero=dict(hero)
    with open("/storage/emulated/0/com.hipipal.qpyplus/scripts3/newgame2.txt") as data_file:
        json.dump(hero, data_file)

回答1:


You are not opening your file in "write mode".

Try to change your open() line to this:

with open("/storage/emulated/0/com.hipipal.qpyplus/scripts3/newgame2.txt", "w") as data_file:
    json.dump(hero, data_file)

By default Python's builtin open() opens files in "read" mode.

The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r'. The default is to use text mode, which may convert '\n' characters to a platform-specific representation on writing and back on reading. Thus, when opening a binary file, you should append 'b' to the mode value to open the file in binary mode, which will improve portability. (Appending 'b' is useful even on systems that don’t treat binary and text files differently, where it serves as documentation.) See below for more possible values of mode.




回答2:


Change the open line to include 'w' which tells Python to open the file in write mode

 with open("/storage/emulated/0/com.hipipal.qpyplus/scripts3/newgame2.txt", 'w') as data_file:
        json.dump(hero, data_file)

https://docs.python.org/3.4/library/functions.html#open



来源:https://stackoverflow.com/questions/30158322/python-json-dump-writability-not-write-able

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!