Почему я вижу "TypeError: строковые индексы должны быть целыми числами"?



Я играю как с изучением python, так и с попыткой получить проблемы github в читаемой форме. Используя советы по как я могу конвертировать JSON в CSV? Я придумал вот что:



import json
import csv

f=open('issues.json')
data = json.load(f)
f.close()

f=open("issues.csv","wb+")
csv_file=csv.writer(f)

csv_file.writerow(["gravatar_id","position","number","votes","created_at","comments","body","title","updated_at","html_url","user","labels","state"])

for item in data:
csv_file.writerow([item["gravatar_id"], item["position"], item["number"], item["votes"], item["created_at"], item["comments"], item["body"], item["title"], item["updated_at"], item["html_url"], item["user"], item["labels"], item["state"]])


где "вопросы.json " - это файл json, содержащий мои проблемы с github. Когда я пытаюсь запустить это, я получаю



File "foo.py", line 14, in <module>
csv_file.writerow([item["gravatar_id"], item["position"], item["number"], item["votes"], item["created_at"], item["comments"], item["body"], item["title"], item["updated_at"], item["html_url"], item["user"], item["labels"], item["state"]])

TypeError: string indices must be integers


чего мне здесь не хватает? Какие "строковые индексы"? Я уверен, что как только я получу эту работу, у меня будет больше проблем, но пока я просто люблю это за работу!



обновление:
Когда я настраиваю for заявление просто



for item in data:
print item


что я получаю ... "проблемы" - так что я делаю что-то более основное неправильно. Вот немного моего json:



{"issues":[{"gravatar_id":"44230311a3dcd684b6c5f81bf2ec9f60","position":2.0,"number":263,"votes":0,"created_at":"2010/09/17 16:06:50 -0700","comments":11,"body":"Add missing paging (Older>>) links...


когда я печатаю data похоже, что это становится munged действительно странно:



{u'issues': [{u'body': u'Add missing paging (Older>>) lin...
2281   5  

5 ответов:

item Это скорее всего строка в вашем коде; в строке индексов в квадратных скобках, например, gravatar_id. Поэтому я бы сначала проверил ваш data переменной, чтобы увидеть, что вы получили там, я думаю, что data - это список строк (или, по крайней мере, список, содержащий хотя бы одну строку), в то время как это должен быть список словарей.

переменная item - это строка. Индекс выглядит так:

>>> mystring = 'helloworld'
>>> print mystring[0]
'h'

в приведенном выше примере используется 0 индекс строки для ссылки на первый символ.

строки не могут иметь строковые индексы (например словари). Так что это не сработает:

>>> mystring = 'helloworld'
>>> print mystring['stringindex']
TypeError: string indices must be integers

data это dict "объект". Итак, повторите это так:

Python 2

for key, value in data.iteritems():
    print key, value

Python 3

for key, value in data.items():
    print(key, value)

TypeError для обозначения среза

при работе с строки и диапазонное представление, может случиться так, что появится следующее сообщение об ошибке:

TypeError: строковые индексы должны быть целыми числами


пример

например, вот этот Python 3 код:

my_string: str = "hello world"

start: int = 3
end: int = 5

print(my_string[start, end])
                     ^
                     ^ pay attention here: this comma should be a colon!

решение

это должно быть my_string[start: end] С a : вместо запятая, между start и end.


Я знаю, что на этот вопрос уже был дан ответ, и это был не совсем тот вопрос, который задал стартер потока, но я пришел сюда из-за вышеуказанной проблемы, которая приводит к тому же сообщению об ошибке, и мне потребовалось некоторое время, чтобы найти эту маленькую ошибку.

поэтому я надеюсь, что это поможет кому-то еще, у кого есть такое же сообщение об ошибке из-за того же маленькая ошибка.

Ура
winklerrr

Это может произойти, если общий отсутствует. Я столкнулся с ним, когда у меня был список из двух кортежей, каждый из которых состоял из строки в первой позиции и списка во второй. В одном случае я ошибочно пропустил запятую после первого компонента кортежа, и интерпретатор подумал, что я пытаюсь индексировать первый компонент.

Comments

    Ничего не найдено.