1

だから私はRdioプレイリストに曲を追加するこの小さなスクリプトを持っています。ほとんどの場合、問題なく動作します。まず、CSVを読み取り、辞書のリストを作成します。各辞書には、トラックの属性が含まれています。これを行うコードは次のとおりです。

csv_tracks = []
f = open('./testing_tracks.csv', 'rb')
reader = csv.reader(f)
for row in reader:
    csv_tracks.append({'artist':row[1], 'title':row[0], 'status':row[2]})
f.close

'status'値は、トラックがすでにプレイリストに追加されているかどうかを示すために、0または1の文字列です(したがって、同じトラックを何度も追加し続けることはありません)。

この問題はスクリプトの後半で発生します。ループを実行してRdioの各トラックを検索し、見つかった場合はプレイリストに追加します。コードは次のとおりです。

for track in csv_tracks:
    if track['status'] == '0':
        if find_track(track) != None:
            key = find_track(track)
            add_to_playlist(key)
            track['status'] = '1'
            print 'Adding %s by %s to the playlist' % (track['title'],track['artist'])

TypeErrorが発生します。メッセージは次のとおりです。

Traceback (most recent call last):
  File "testing.py", line 76, in <module>
    if track['status'] == '0':
TypeError: list indices must be integers, not str

本当に奇妙なことは、スクリプトがほとんど正常に機能しているように見えることです。ステータスが「0」のトラックの場合、トラックを検索してプレイリストに追加し、上記のようにメッセージをログに記録します(「プレイリストに追加しています...」)。動作しないのは、トラックが追加されたときにtrack['status']が'1'に変更されないことだけです。そして、私はエラーを受け取ります。

Pythonが私の辞書をリストであり、整数のインデックスしか受け入れられないと考える理由がよくわかりません。何か助けはありますか?

免責事項:私は初心者です。私がひどく愚かなことをしているなら、優しくしてください:)

4

1 に答える 1

0

これを使用するcsv.DictReaderと、名前で要素にアクセスできます。デフォルトでcsv.readerは、各レコードがリストとして返されます。

于 2013-04-10T22:42:13.020 に答える