現在、私は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データの書き込み、読み込みについて説明しました。
他の言語と比べてもすっきりとしたコードになっていていい感じです。
今回は以上となります。
コメント