ast.literal_eval使うのも手。'だけでなく、TrueとかFalseが"で囲ってなくても行ける。
具体的に説明すると、たとえば、
第6回・JSONファイル|CSV、XML、JSON…データフォーマットの変遷について考える
https://www.gixo.jp/blog/4196/
にあるようなJSONを読むことを考える。
上記にある例は、”が全角になっているので、それを半角にして、空白カットすると、
こんな風になる
この場合、pythonで読み込むには、普通にjson.load()で読み込める。こんなかんじのソースになる。
ただ、これだと、ダブルクォートをシングルクォートに変えただけで、読み込めなくなる。
変換すればいいじゃん!と思うかもしれないけど、値にダブルクォートの箇所があるため、シングルクォートがある場合、単純にダブルクォートに変換すると、読み込みに失敗する。
また、真偽のTrue,Falseについてはダブルクォートがついていない場合がある。
そういうときに、どうするか?
ast.literal_eval()を使うと読み込める。具体的には、上のケースをast.literal_evalで書くと、こんな感じ
これだと、シングルクォート、真偽の場合も読み込める
具体的に説明すると、たとえば、
第6回・JSONファイル|CSV、XML、JSON…データフォーマットの変遷について考える
https://www.gixo.jp/blog/4196/
にあるようなJSONを読むことを考える。
上記にある例は、”が全角になっているので、それを半角にして、空白カットすると、
こんな風になる
[{"順位":1,"氏名":"王貞治","本数":868},{"順位":2,"氏名":"野村克也","本数":657},{"順位":3,"氏名":"門田博光","本数":567},{"順位":4,"氏名":"山本浩二","本数":536},{"順位":5,"氏名":"清原和博","本数":525}] |
この場合、pythonで読み込むには、普通にjson.load()で読み込める。こんなかんじのソースになる。
import json f=open('C:\\Users\\user\\Desktop\\sample.txt','r') dic = json.load(f) print(dic) |
ただ、これだと、ダブルクォートをシングルクォートに変えただけで、読み込めなくなる。
変換すればいいじゃん!と思うかもしれないけど、値にダブルクォートの箇所があるため、シングルクォートがある場合、単純にダブルクォートに変換すると、読み込みに失敗する。
また、真偽のTrue,Falseについてはダブルクォートがついていない場合がある。
そういうときに、どうするか?
ast.literal_eval()を使うと読み込める。具体的には、上のケースをast.literal_evalで書くと、こんな感じ
import ast f= open('C:\\Users\\user\\Desktop\\sample.txt', 'r') data=f.read() dic = ast.literal_eval(data) print(dic) |
これだと、シングルクォート、真偽の場合も読み込める