◇PythonでJsonを読むための最重要事項
encoding="utf8"
Python3でJsonファイルを読み込む場合の最重要事項
Pyhton3でJsonデータファイルを読み込む場合はopen()でencoding="utf8"を指定する必要があります。
# pythonJson.py for json3
import sys # コマンド引数を得るためのモジュール
import json # json形式を取り扱うモジュール
print("file="+sys.argv[1])
f = open(sys.argv[1],encoding="utf8") # json形式ファイル
data = json.load(f) # json形式として読み込み
f.close()
print(data) # 読み込んだデータを表示してみる
exit() # 終了
これを忘れるとWindowsではjson.loadで次のようなエラーとなります。
file=pythonJson.json.txt Traceback (most recent call last): File "pythonJson.py", line 6, indata = json.load(f) # json形式として読み込み File "C:\Users\XXXXX\AppData\Local\Programs\Python\Python37\lib\json\__init__. py", line 293, in load return loads(fp.read(), UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 14: illegal multibyte sequence
読み込ませたデータは次のものです。
{
"スポーツ":{
"球技":["野球","サッカー"],
"格闘技":["柔道","レスリング"]}}
エラーとなるのはjsonはUTFと決まっているにも関わらず、わざわざ"utf8"を指定してやらないと、Windowsでは一旦cp932として解釈しようとするからです。
ちなみに、正しく動くと次の出力が得られます。
file=pythonJson.json.txt
{'スポーツ': {'球技': ['野球', 'サッカー'], '格闘技': ['柔道', 'レスリング']}}
続行するには何かキーを押してください . . .
最も高い壁といえるencoding="utf8"を超えれば後は左程困難はないと考えています。
結局一番難しいのはこういう論理以外の考えても分かるはずのない部分なのです。
参考までに pythJs.sample.zipにプログラムとデータ、起動バッチファイルを置きました。
なお、起動バッチファイルは次のものです。
@echo off for %%f in (*.json.txt) do ( python pythonJson.py %%f ) pause
| 固定リンク

