我有多个文件要加载为JSON,它们都以相同的方式格式化,但对于其中一个我无法加载它而不引发异常。您可以在此处找到该文件:
我做了以下代码:
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
你知道我怎么能骑它吗?
答案 0 :(得分:2)
file_name = 'data/matches%s.json' % i
替换为file_name =' data / matches%i.json' %i 正确的语法是data = json.load(file_name)
而不是 -
使用open(file_name)作为data_file: data = json.load(data_file)
编辑:
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
答案 1 :(得分:2)
您的JSON正在尝试将数据强制为unicode,而不仅仅是一个简单的字符串。你有一些嵌入式角色(可能是一个空间或不太明显的东西),不能强制进入unicode。
How to get string objects instead of Unicode ones from JSON in Python?
这是一个关于在python中使JSON对象更易于管理的好主题。
答案 2 :(得分:1)
尝试:
json.loads(data_file.read(), encoding='utf-8')
答案 3 :(得分:1)
尝试:
json.loads(unicode(data_file.read(), errors='ignore'))
或:
json.loads(unidecode.unidecode(unicode(data_file.read(), errors='ignore')))
(对于第二个,您需要安装unidecode)