JSON形式での出力
辞書型のオブジェクトまたはそのリストをJSON形式で出力する。
JSONファイルに追記する
これに
これを追記して
これを作りたい。
一度ファイルを読み込んで書き足すのでも良いが、追記モードでファイルを終端からいじる方が早い気がする。
open(filename, 'ab+')
追記モード&バイナリ(ストリーム)モードでファイルを開く。
f.seek(offset, whence)
ファイルオブジェクトの位置を変更する。
位置は基準点にoffsetを足したものになる。
whence 0 (default): 先頭, 1: 現在位置, 2: 終端
seek(-1,2)では終端の一つ手前に移動する。
f.truncate(size=None)
ストリームのサイズ(ここではファイルイブジェクト)のサイズを指定されたsizeバイトに変更する。
sizeが指定されていない場合は現在位置に切り詰める。
f.write()
書き込み。
カンマを足して、追記したいコンテンツをjson.dumps()で追記して、リストの括弧を閉じる。
vimで開くとうまくいかなくなる問題
テストしたいことがあってvimで開いて編集したりすると、位置がずれて正しく追記できなくなってしまった。
上の方法を適用すると次のようになってしまう。
vimで開いても違いが無いので分かりにくいが、どうやら改行コードが入っているらしい。ということで次のように修正した。
f.read()で移動してしまうのでその都度位置を戻している。