Python

Pythonでjsonファイルの読み/書きをする方法

Python

現在、私はPythonでスクレイピング系のスクリプトを作成していますが、データを扱う際にjsonフォーマットを使ってます。

csvなどでもよいのですが、配列やdictなどの形式で複雑なデータを扱う場合にはjson形式が一番理にかなってます。

Pythonはjsonライブラリを利用することが簡単にjsonフォーマットを取り扱うことができ、ファイルへの読み込みや書き込みも簡単に行うことができます。

今回は自分用のメモとしてPythonでのjsonファイルの読み書きする方法について記載します。

試した環境

・Windows 10 Pro v2004
・Python 3.8.5
・Selenium 3.141.0
・Chrome 84.0.4147.135

書き込み方法

サンプルスクリプト(書き込み)

まずは書き込み方法からです。サンプルファイルは以下となります。

import json

# 書き込みファイル
output_file = "test.json"

# サンプルデータとして以下を利用する
item_keys = ['url', "name"]
item_values_url = ['http://abcde', 'http://fghijk', 'http://lmnop']
item_values_name = ['あいうえお', 'かきくけこ', 'さしすせそ']
item_detail_datas = []

# サンプルデータを成形する
for item_value_url in item_values_url:
    for imtem_value_name in item_values_name:
        tmp_dict = {item_keys[0]: item_value_url ,item_keys[1]:imtem_value_name}
        item_detail_datas.append(tmp_dict)

# Json形式で表示
print(json.dumps(item_detail_datas, indent=4))

# ファイルに保存
with open(output_file, 'w') as f:
    json.dump(item_detail_datas, f, indent=4)

実行結果(書き込み)

実行すると以下のような表示がされ、test.jsonという名前のjsonが書きこまれたファイルが作成されます。

デフォルトでは日本語はASCIIエンコードされた状態で出力されますensure_ascii=False のオプションを指定することでそのまま出力することも可能です 。

※http:// の部分がWordPressで自動変換されてしまったのでhttp://の後にスペースを入れてますので実際にはスペースを外してください。

[
    {
        "url": "http:// abcde",
        "name": "\u3042\u3044\u3046\u3048\u304a"
    },
    {
        "url": "http:// abcde",
        "name": "\u304b\u304d\u304f\u3051\u3053"
    },
    {
        "url": "http:// abcde",
        "name": "\u3055\u3057\u3059\u305b\u305d"
    },
    {
        "url": "http:// fghijk",
        "name": "\u3042\u3044\u3046\u3048\u304a"
    },
    {
        "url": "http:// fghijk",
        "name": "\u304b\u304d\u304f\u3051\u3053"
    },
    {
        "url": "http:// fghijk",
        "name": "\u3055\u3057\u3059\u305b\u305d"
    },
    {
        "url": "http:// lmnop",
        "name": "\u3042\u3044\u3046\u3048\u304a"
    },
    {
        "url": "http:// lmnop",
        "name": "\u304b\u304d\u304f\u3051\u3053"
    },
    {
        "url": "http:// lmnop",
        "name": "\u3055\u3057\u3059\u305b\u305d"
    }
]

スクリプト説明(書き込み)

それではサンプルスクリプトについて説明していきます。

1行目:import jsonでモジュールを読み込みしてます

3-4行目:書き込み先のファイル名を指定してます

6-10行目:サンプル用のデータを定義してます。keyとvalueで2列×3行という形のサンプルデータになります。

12-16行目:サンプル用のデータをdict型になるように加工しています。

18-19行目:json.dumpsを利用してjsonに変換した結果を表示しています。indent=4を指定して表示する際に整形してます。

21-23行目:ファイルに書き込んでます。(オプション:w)

読み込み方法

サンプルスクリプト(読み込み)

次に読み込みとなります。サンプルファイルは以下となります。

先ほど書き込みの際に作成したファイル(test.json)をそのまま読み込んでます。

import json

output_file = "test.json"

# ファイルを読み込み
with open(output_file, 'r') as f:
    json_datas = json.load(f)
    print(json_datas)

# データの扱い
for json_data in json_datas:
    print (json_data["url"]+" : "+json_data["name"])

実行結果(読み込み)

[{'url': 'http://abcde', 'name': 'あいうえお'}, {'url': 'http://abcde', 'name': 'かきくけこ'}, {'url': 'http://abcde', 'name': 'さしすせそ'}, {'url': 'http://fghijk', 'name': 'あいうえお'}, {'url': 'http://fghijk', 'name': 'かき
くけこ'}, {'url': 'http:// fghijk', 'name': 'さしすせそ'}, {'url': 'http://lmnop', 'name': 'あいうえお'}, {'url': 'http://lmnop', 'name': 'かきくけこ'}, {'url': 'http://lmnop', 'name': 'さしすせそ'}]
http:// abcde : あいうえお
http:// abcde : かきくけこ
http:// abcde : さしすせそ
http:// fghijk : あいうえお
http:// fghijk : かきくけこ
http:// fghijk : さしすせそ
http:// lmnop : あいうえお
http:// lmnop : かきくけこ
http:// lmnop : さしすせそ

スクリプト説明(読み込み)

それではサンプルスクリプトについて説明していきます。

書き込みのサンプルと違いがあるところだけ見ていきます。

6-9行目:output_fileを読み込み用(オプション:r)として開いて、json.loadでjson形式として変換してます。

10-12行目:ファイルから読み込んだデータのアイテムごとに表示してます。

まとめ

今回はPythonでjsonデータの書き込み、読み込みについて説明しました。

他の言語と比べてもすっきりとしたコードになっていていい感じです。

今回は以上となります。

コメント