Python TypeError:字符串索引必须是整数和ValueError

Python TypeError:字符串索引必须是整数和ValueError,python,typeerror,Python,Typeerror,我想遍历数据,只下载登录名,但出现以下错误: print elem["login"] TypeError: string indices must be integers, not str ValueError: invalid literal for int() with base 10: 'login' 我的代码: import requests import json import csv import urllib def printContents(path): fi

我想遍历数据,只下载登录名,但出现以下错误:

print elem["login"]
TypeError: string indices must be integers, not str
 ValueError: invalid literal for int() with base 10: 'login'
我的代码:

import requests
import json
import csv
import urllib

 def printContents(path):
    filein = open(path, 'r')
    instr = filein.read()
    filein.close()
 printContents("top_story_2012.txt")
 appkey = "...."
 url= "http://a.wykop.pl/ludzie/followers/"
 wykopff = open("top_story_2012.txt", 'r')
 names = [line.strip() for line in wykopff.readlines()]
 for i in names:
    p = urllib.urlopen(url + i + "/appkey/" + appkey)
    wykops = p.read()
    read = json.loads(wykops)
    for elem in wykops:
        print elem["login"]
我试图将“login”更改为整数:

   print elem[int("login")]
我不确定这样做是否可行,但仍然不起作用,然后我得到以下错误:

print elem["login"]
TypeError: string indices must be integers, not str
 ValueError: invalid literal for int() with base 10: 'login'
我尝试迭代的内容如下所示:

  {"login":"Josif6969","email":"a9a4525e207fcba3ac0fc221246439a3:3670009297","public_email":"","name":"","www":"","jabber":"","gg":"","city":"","about":"Hobby: Obserwator.","author_group":1,"links_added":82,"links_published":4,"comments":132,"rank":0,"followers":       

您希望循环读取解码的JSON结构,而不是:

wykops = p.read()
read = json.loads(wykops)
for elem in read:
    print elem["login"]
或者,将其简化为使用
json.load()

for elem in json.load(p):
    print elem["login"]
这假设来自
json.load()
调用的数据是一个列表,但我认为您只是想将结果作为字典处理:

data = json.load(p):
print data["login"]
听起来(从评论中)好像有些回复返回了一个列表。尝试以下方法来了解发生了什么:

data = json.load(p):
try:
    print data["login"]
except TypeError:
    # not a dictionary, so what is it *then*?
    print "Not a dictionary:", data
您的代码在JSON数据字符串上逐个字符循环,因此您试图将
[“login”]
应用于python字符串:

>>> 'somestring'["login"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string indices must be integers, not str
>>'somestring'[“login”]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:字符串索引必须是整数,而不是str

您不应该对读取中的元素执行
吗?
是的,我需要循环读取,但仍然得到:TypeError:字符串索引必须是integers@user2015906:尝试第二个建议;如果
read
是一个字典,循环它会给出字典的键,
elem
则仍然是一个字符串。@user2015906:使用
read['login']
,没有循环。或者用我的第二个示例(
data=json.load(p);print data['login']
)替换您刚才在注释中输入的内容,该示例的行数更少。wykops=p.read()data=json.load(p)print data['login']给出了一个错误:ValueError:无法创建json对象decoded@user2015906:删除
wykops=p.read()
.load()
为您读取数据,但不能读取两次。