source

python으로 json 파일을 업데이트하는 방법

ittop 2023. 3. 13. 20:51
반응형

python으로 json 파일을 업데이트하는 방법

기존 Json 파일을 업데이트하려고 하는데, 어떤 이유로 인해 요청된 값이 변경되지 않고 전체 값 집합(새 값 포함)이 원본 파일에 추가되고 있습니다.

jsonFile = open("replayScript.json", "r+")
data = json.load(jsonFile)


tmp = data["location"]
data["location"] = "NewPath"

jsonFile.write(json.dumps(data))

결과는 다음과 같습니다.필수:

{
   "location": "NewPath",
   "Id": "0",
   "resultDir": "",
   "resultFile": "",
   "mode": "replay",
   "className":  "",
   "method":  "METHOD"
}

실제:

{
"location": "/home/karim/storm/project/storm/devqa/default.xml",
"Id": "0",
"resultDir": "",
"resultFile": "",
"mode": "replay",
"className":  "",
"method":  "METHOD"
}
{
    "resultDir": "",
    "location": "pathaaaaaaaaaaaaaaaaaaaaaaaaa",
    "method": "METHOD",
    "className": "",
    "mode": "replay",
    "Id": "0",
    "resultFile": ""
}

여기서의 문제는, 커서가 파일의 끝에 있도록, 파일을 열어 그 내용을 읽었다는 것입니다.같은 파일 핸들에 쓰는 것은 기본적으로 파일에 추가하는 것입니다.

가장 쉬운 해결책은 파일을 읽은 후 닫은 후 다시 열어 쓰는 것입니다.

with open("replayScript.json", "r") as jsonFile:
    data = json.load(jsonFile)

data["location"] = "NewPath"

with open("replayScript.json", "w") as jsonFile:
    json.dump(data, jsonFile)

또는 를 사용하여 커서를 파일의 선두로 되돌린 후 쓰기를 시작하여 새로운 데이터가 이전 데이터보다 작은 경우에 대처할 수 있습니다.

with open("replayScript.json", "r+") as jsonFile:
    data = json.load(jsonFile)

    data["location"] = "NewPath"

    jsonFile.seek(0)  # rewind
    json.dump(data, jsonFile)
    jsonFile.truncate()
def updateJsonFile():
    jsonFile = open("replayScript.json", "r") # Open the JSON file for reading
    data = json.load(jsonFile) # Read the JSON into the buffer
    jsonFile.close() # Close the JSON file

    ## Working with buffered content
    tmp = data["location"] 
    data["location"] = path
    data["mode"] = "replay"

    ## Save our changes to JSON file
    jsonFile = open("replayScript.json", "w+")
    jsonFile.write(json.dumps(data))
    jsonFile.close()
def updateJsonFile():   
    with open(os.path.join(src, "replayScript.json"), "r+") as jsonFile:
        data = json.load(jsonFile)
        jsonFile.truncate(0)
        jsonFile.seek(0)
        data["src"] = "NewPath"
        json.dump(data, jsonFile, indent=4)
        jsonFile.close()
def writeConfig(key, value):
        with open('config.json') as f:
            data = json.load(f)
            # Check if key is in file
            if key in data:
                # Delete Key
                del data[key]
                cacheDict = dict(data)
                # Update Cached Dict
                cacheDict.update({key:value})
                with open(dir_path + 'config.json', 'w') as f:
                    # Dump cached dict to json file
                    json.dump(cacheDict, f, indent=4)

언급URL : https://stackoverflow.com/questions/13949637/how-to-update-json-file-with-python

반응형