-1

我想遍历数据并仅下载登录信息,但出现此错误:

print elem["login"]
TypeError: string indices must be integers, not str

我的代码:

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"]

我试图将“登录”更改为整数:

   print elem[int("login")]

我不确定这是否是这样做的方法,但它仍然不起作用,然后我收到此错误:

 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":       
4

1 回答 1

0

你想循环read,解码的 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
于 2013-03-26T11:45:57.870 回答