首先,我是python的全新人物。我是一名平面设计师,我需要获得团体成员照片以获得团体徽标。我发现了这个: https://github.com/lionaneesh/IIITD-Students-Collage 它几乎应该做我需要的东西,但显然我做错了什么并且它没有按预期工作。
执行此脚本时:
import json
from urllib2 import urlopen
fp = open("test2.txt")
data = json.loads(fp.read())
fp.close()
user_photos = {} # id -> [User's Name, Photo URL]
for user in data["data"]:
print user
page = urlopen("http://graph.facebook.com/" + user["id"] + "?fields=picture")
page_data = json.loads(page.read())
photo_url = page_data["picture"]["data"]["url"]
user_photos[user["id"]] = [user["name"], photo_url]
fp = open("user_photos.json", "w")
fp.write(json.dumps(user_photos))
我收到此错误:
Traceback (most recent call last):
File "C:\test.py", line 11, in <module>
for user in data["data"]:
KeyError: 'data'
>>>
有人可以向我解释如何解决问题或在哪里寻求帮助吗?
编辑:这是text2.txt中数据的外观:
{
"id": "1390694364479028",
"members": {
"data": [
{
"name": "Patryk Wiśniewski",
"administrator": false,
"id": "321297624692717"
},
{
"name": "Backed PL",
"administrator": false,
"id": "1440205746235525"
},
等等,与其他小组成员的信息
答案 0 :(得分:1)
KeyError
表示dict对象中没有这样的键。因此,这意味着根据您的脚本,您的文件不包含这样的JSON数据结构。
{"data": {"id": 10000}, {"id": 20000}, {"id": 30000}}
如果您发布了test2.txt
的内容或print(data)
的输出,那将会有所帮助。
编辑:根据你的text2.txt文件,你的程序流程应该是这样的
for user in data["members"]["data"]:
print user
page = urlopen("http://graph.facebook.com/" + user["id"] + "?fields=picture")
page_data = json.loads(page.read())
photo_url = page_data["picture"]["data"]["url"]
user_photos[user["id"]] = [user["name"], photo_url]
您只需将data["data"]
更改为data["members"]["data"]
即可使您的脚本正常运行。
答案 1 :(得分:0)
你可能在test2.txt
中没有“data”的JSON字段答案 2 :(得分:0)
查看文档,您应该在txt文件中具有与以下内容完全相同的结构。详细信息。
{
"data": [
{
"name": "Arushi Jain",
"administrator": false,
"id": "100000582289046"
},
{
"name": "Ajay Yadav",
"administrator": false,
"id": "100004213058283"
},
and so on ........
],
"paging": {
"next": "https://graph.facebook.com/114462201948585/members?limit=5000&offset=5000&__after_id=712305377"
}
}
{
{
"data": [ # how yours should look
{
"name": "Patryk Wiśniewski",
"administrator": false,
"id": "321297624692717"
},
{
"name": "Patryk Kurowski",
"administrator": false,
"id": "1429534777317507"
},
{
"name": "Jan Konieczny",
"administrator": false,
"id": "852450774783365"
}
],
"paging": {
"next": "https://graph.facebook.com/114462201948585/members?limit=5000&offset=5000&__after_id=712305377"
}
}
这是在循环中执行的第一件事,所以如果它不完全匹配则会失败,就像它在错误中一样。