2013-03-26 6 views
-1

Я хочу перебирать логинов данных и только скачать, но я получаю эту ошибку:TypeError: строковые индексы должны быть целыми и ValueError

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

Я не уверен, что это способ сделать это, но он все еще не работает, а затем я получаю эту электронную rror:

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":  
+0

Разве вы не должны делать «для чтения в элементе»? –

ответ

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"] к питона строки:

>>> 'somestring'["login"] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: string indices must be integers, not str 
+0

Да, true, мне нужно зациклиться на чтении, но я все равно получаю: TypeError: строковые индексы должны быть целыми числами – user2015906

+0

@ user2015906: Попробуйте второе предложение; если 'read' является словарем, цикл за ним дает вам * ключи * словаря, а' elem' - это еще строка. –

+0

@ user2015906: используйте 'read ['login']', * no * loop. Или замените то, что вы положили в свой комментарий, с моим * вторым * примером ('data = json.load (p); print data ['login']'), который делает то же самое в меньшем количестве строк. –

Смежные вопросы