PythonでJsonファイルに追加の書き込みをする方法

2019年11月23日

みなさまおはこんばんにちは、せなです

今回はJsonファイルに追加の値を入力する方法を解説したいと思います

Jsonファイルの基本的な使い方は以下の記事を参考にしてください

リンク:PythonでJsonファイルを使用する方法

最後尾への追加

PythonでのJsonファイルへの追加を行う場合には以下のように記述します

import json

dic = {"apple": 120}

with open('sample.json', 'ab+') as file:    # ファイルを開く
    file.seek(-1, 2)                        # ストリームの位置を末尾-1に変更
    file.truncate()                         # ']'を削除
    file.write(' ,'.encode())               # ファイルへ,を追加
    file.write(json.dumps(dic).encode())    # 追加する値を入力
    file.write(']'.encode())                # ']'を追加

いくつかの使用している関数について説明します

seek()関数について

file.seek(-1, 2)

seek()関数はファイルストリームの位置を変更するために使用されます

seek(0, 0)とすることでストリームの先頭位置に変更します

seek(1, 1)であれば現在位置の次へ変更します

seek(-1, 2)とすれば末尾の一つ手前に変更されます

リンク:Python3.8.0ドキュメント seek()

truncate()関数について

file.truncate()

truncate()関数はストリームサイズの拡大、拡縮を行うために使用されます

truncate()のように記述しない場合には現在位置にサイズを変更します

truncate(512)のようにするとストリームサイズを512までに変更します
(ストリームサイズが512よりも小さければ拡大され、大きければ拡縮されます)

リンク:Python3.8.0ドキュメント truncate()

複数の値を最後尾に追加

複数の値を追加したい場合には以下のようにenumerate()を使用して行います

dic = {"apple": 120}, {"grape": 450}, {"orange": 80}

    for i,d in enumerate(dic):
        with open('sample.json', 'ab+') as file:
            file.seek(-1, 2)
            file.truncate()
            file.write(' ,'.encode())
            file.write(json.dumps(d).encode())
            file.write(']'.encode())