1. ホーム
  2. パイソン

[解決済み】「TypeError: string indices must be integers」と表示されるのですが?

2022-05-02 16:24:52

質問

Pythonの学習とgithubのissueを読みやすい形にすることの両方で遊んでいます。以下のアドバイスを参考にしています。 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"]])

ここで "issues.json" は、私の github issues を含む json ファイルです。これを実行しようとすると、次のようになります。

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 が、実に奇妙な形でつぶされているように見えます。

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

解決方法は?

item は、あなたのコード内の文字列である可能性が高いです。文字列のインデックスは角括弧の中にあるもので、例えば gravatar_id . そこで、まず、あなたの data 変数で受け取ったものを確認します。 data は文字列のリスト(または少なくとも1つの文字列を含むリスト)であるのに対して、辞書のリストであるべきです。