我正在试图弄清楚为什么我在尝试从Steam API中退出时遇到Type错误,我正在尝试创建一个字典然后变成一个CSV文件,我知道这是在JSON所以我的问题有两个,如何创建CSV类型的数据以及如何获取我所拥有的JSON信息。这种方法的想法是获取AppID列表,以便我可以找到它们的价格:
代码:
def steamlibrarypull(steamID, key):
#Pulls out a CSV of Steam libraries
steaminfo = {
'key': key,
'steamid': steamID,
'format':'JSON',
'include_appinfo':'1'
}
r = requests.get('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/', params=steaminfo)
d = json.loads(r.content)
I = d['response']['games']
B = {}
for games in I:
B[I['name']] = I['appid']
return B
Traceback (most recent call last):
File "steam.py", line 46, in <module>
print steamlibrarypull(76561197960434622, key)
File "steam.py", line 44, in steamlibrarypull
B[I['name']] = I['appid']
TypeError: list indices must be integers, not str
答案 0 :(得分:0)
您的for
循环没有按照您的意愿执行。使用此:
for game in I:
B[game['name']] = game['appid']
return B
在这种情况下 I
(我假设,因为我没有Steam帐户)是一个包含许多dicts的列表,每个dicts都有'name'
字段和{{1其他领域。您的'appid'
循环正在遍历每个dicts,并且您希望仅将这两个字段存储在名为for
的新dict中。但是,在您的代码中,B
不起作用,因为I['name']
是一个列表,并且只能由整数索引,因此错误。但是,当迭代这个dicts列表时,I
可以正常工作,因为dicts是由它们的键索引的。
就将此数据转换为CSV格式而言,有关此主题的SO有很多问题,因此请使用Google进行搜索。
答案 1 :(得分:0)
您没有正确引用迭代器。
def steamlibrarypull(steamID, key):
#Pulls out a CSV of Steam libraries
steaminfo = {
'key': key,
'steamid': steamID,
'format':'JSON',
'include_appinfo':'1'
}
r = requests.get('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/', params=steaminfo)
d = json.loads(r.content)
I = d['response']['games']
B = {}
for games in I:
B[games['name']] = games['appid']
return B
这将返回一个名称字典:appid。然后,您需要遍历它并将其写入文件。
with open('games.csv', 'w') as f:
for key, value in B.items():
f.write("%s,%s\r\n" % (key, value))