2016-05-13 1 views
0

я очень новичок в программирование и у меня возникла проблемы со следующим:TypeError: строковые индексы должны быть целыми числами, при попытке извлечь данные из API с помощью Python

У меня есть очень простая и, возможно, бессмысленная задача, посредством которой Я пытаюсь взять данные о долготе и широте из API JSON и записать в CSV-файл. Я основал код на другом, который, похоже, работает нормально.

я получаю следующий код ошибки:

c.writerow([item['latitude']])_TypeError: string indices must be integers

Может кто-нибудь мне помочь ??

код JSON из http://api.open-notify.org/iss-now.json

{ 
    "iss_position": { 
    "latitude": 17.03894678089794, 
    "longitude": 1.17550020887323 
    }, 
    "message": "success", 
    "timestamp": 1463137065 
} 

Мой Python код

import requests 
import csv 

r = requests.get("http://api.open-notify.org/iss-now.json").json() 

c = csv.writer(open("ISS.csv", "w"),lineterminator='\n') 

for item in r['iss_position']: 

    c.writerow([item['latitude'],['longitude']]) 

Сообщение об ошибке

C:\Python35\python.exe C:/Users/Ian/PycharmProjects/ISS/ISS.py 
Traceback (most recent call last): 
    File "C:/Users/Ian/PycharmProjects/ISS/ISS.py", line 10, in <module> 
    c.writerow([item['latitude']]) 
TypeError: string indices must be integers 

Process finished with exit code 1 

ответ

2

Значение, присвоенное iss_position ключа (r['iss_position']) представляет собой словарь. Таким образом, итерация по ней даст ключи (строки), а не значения (координаты). Похоже, что это будет делать в этом случае:

c.writerow([r['iss_position']['latitude'],r['iss_position']['longitude']]) 

Петля for больше не требуется. В словаре есть два ключа под ключом 'iss_position', поэтому цикл поворачивается дважды. Достаточно вызвать код выше один раз.

+0

Спасибо Piotr, который теперь записал координаты в мой CSV-файл, хотя он, похоже, дважды записывает данные. Могли бы вы посоветовать, как я могу получить новые данные для добавления в мой CSV-файл, а не писать поверх него. –

+0

См. Мое правление о цикле 'for'. Что касается других несвязанных вопросов, пожалуйста, Google их. Здесь много ресурсов, в том числе [добавление в CSV] (http://stackoverflow.com/questions/21432610/python-append-to-csv-file-without-whiteline). –

+0

ОК и спасибо за очень быстрый ответ –

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