2016-06-27 13 views
1

JSONとしてロードするファイルが複数ありますが、それらはすべて同じ方法でフォーマットされていますが、そのうちの1つでは例外を発生させることなくロードできません。これは、ファイルを見つけることができる場所です。Pythonでjsonファイルをロードする

File

私は、次のコードをした:

def from_seed_data_extract_summoners(): 
    summonerIds = set() 
    for i in range(1,11): 
     file_name = 'data/matches%s.json' % i 
     print file_name 
     with open(file_name) as data_file:  
      data = json.load(data_file) 
     for match in data['matches']: 
      for summoner in match['participantIdentities']: 
       summonerIds.add(summoner['player']['summonerId']) 
    return summonerIds 

、私は次の手順を実行したときにエラーが発生します。json.load(data_file)。私は特殊文字があると思いますが、それを見つけることができず、それを置き換える方法がわかりません。生成されるエラーは次のとおりです。

UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 6: invalid continuation byte 

どのように私はそれの乗り心地を知っていますか? データ= JSON:DATA_FILEとしてオープン(FILE_NAME)と

- のfile_name =と

答えて

1

は試してみてください。

json.loads(unicode(data_file.read(), errors='ignore')) 

か:

json.loads(unidecode.unidecode(unicode(data_file.read(), errors='ignore'))) 

(第2のために、あなたはunidecodeをインストールする必要があります)

2
  1. 置き換えるfile_name = 'data/matches%s.json' % i%私
  2. 右の構文はdata = json.load(file_name)とではありません 'データは/%i.json一致する' を.LOAD(DATA_FILE)

EDIT:

def from_seed_data_extract_summoners(): 
summonerIds = set() 
    for i in range(1,11): 
     file_name = 'data/matches%i.json' % i 
     with open(file_path) as f: 
      data = json.load(f, encoding='utf-8') 
     for match in data['matches']: 
      for summoner in match['participantIdentities']: 
       summonerIds.add(summoner['player']['summonerId'])  
    return summonerIds 
+0

私は変更をしました次のエラーが発生します。 AttributeError: 'str'オブジェクトに '読み取り'属性がありません – mel

+1

私の回答を書き換えます –

+1

また、https://docs.python.org/2/library/json.html#json.loadとhttpsもご覧ください://docs.python.org/2/library/json.html#json.load @mel –

2

あなたのJSONは、単純な文字列だけでなく、データをユニコードに強制しようとしています。あなたは、ユニコードに強制できない埋め込みキャラクター(恐らくスペースや目立たないもの)を持っています。 JSONはPythonでより管理オブジェクトを作るの素晴らしいスレッドです

How to get string objects instead of Unicode ones from JSON in Python?

1

試してみてください。

json.loads(data_file.read(), encoding='utf-8') 
+0

'ascii'コーデックは16260798の位置でバイト0xc3をデコードできません:序数は範囲内にありません(128) – mel

関連する問題