###前提・実現したいこと
現在音楽の情報系のwebアプリを作ろうとしています。
DBPediaからもってきたtsvのファイルを加工して
ART-SCHOOL,パワー・ポップ
ART-SCHOOL,インディー・ロック
ART-SCHOOL,オルタナティヴ・ロック
ART-SCHOOL,ニュー・ウェーヴ_(音楽)
ART-SCHOOL,ポスト・グランジ
Doa (ミュージシャン),J-POP
Doa (ミュージシャン),ロック_(音楽)
こういう情報を
[['ART-SCHOOL', 'パワー・ポップ', 'パワー・ポップ', 'インディー・ロック', 'オルタナティヴ・ロック', 'ニュー・ウェーヴ_(音楽)', 'ポスト・グランジ'],['Doa(ミュージシャン)','J-POP','ロック_(音楽)']]
という形に加工しようと思っています。なお、データはこの二つのアーティストだけでなく、他にもたくさんいます。
###発生している問題・エラーメッセージ
['ART-SCHOOL', 'パワー・ポップ'] 0 [['ART-SCHOOL', 'パワー・ポップ', 'パワー・ポップ']] ['ART-SCHOOL', 'インディー・ロック'] 0 [['ART-SCHOOL', 'パワー・ポップ', 'パワー・ポップ', 'インディー・ロック']] ['ART-SCHOOL', 'オルタナティヴ・ロック'] 0 [['ART-SCHOOL', 'パワー・ポップ', 'パワー・ポップ', 'インディー・ロック', 'オルタナティヴ・ロック']] ['ART-SCHOOL', 'ニュー・ウェーヴ_(音楽)'] 0 [['ART-SCHOOL', 'パワー・ポップ', 'パワー・ポップ', 'インディー・ロック', 'オルタナティヴ・ロック', 'ニュー・ウェーヴ_(音楽)']] ['ART-SCHOOL', 'ポスト・グランジ'] 0 [['ART-SCHOOL', 'パワー・ポップ', 'パワー・ポップ', 'インディー・ロック', 'オルタナティヴ・ロック', 'ニュー・ウェーヴ_(音楽)', 'ポスト・グランジ']] ['Doa (ミュージシャン)', 'J-POP'] 0 ['Doa (ミュージシャン)', 'ロック_(音楽)'] 5 Traceback (most recent call last): File "musician3.py", line 19, in <module> if output_data[recognize_name_num][0] == array_row[0]: IndexError: list index out of range
###該当のソースコード
python
1# -*- coding: utf-8 -*- 2import csv 3 4output_data = [['ART-SCHOOL','パワー・ポップ']] 5row_num = 0 #行数を把握するための番号 6recognize_name_num = 0 #rowは無差別に進むので、artistの名前をチェックするための数をチェックする方の番号を調べる。 7 8#全行をまず配列に変換する。 9with open('second_rock_musician.tsv','r') as f: 10 reader = csv.reader(f,delimiter='\n') 11 for row in reader: 12 str_row = ",".join(row) #いったん文字列へ 13 #print(str_row) 14 array_row = str_row.split(',') #扱いやすい配列へ。 15 #rowが思った通りの配列じゃないことが原因。 16 print(array_row) 17 print(recognize_name_num) 18 19 if output_data[recognize_name_num][0] == array_row[0]: 20 rock_genre = array_row[1] 21 output_data[recognize_name_num].append(rock_genre) 22 print(output_data) 23 else: 24 output_data.append(row) 25 recognize_name_num = row_num 26 27 row_num = row_num + 1 28 29
###試したこと
初期データで入れておかないとエラーが出るので、とりあえず1行最初に入れてあります。
index out of rangeの原因はrecognize_name_numで存在しないところがおかしいことだろう、と判断はつくのですがどういう手法で解決したらいいかがわからない状態です。あとはこれでできたらtsvで出力しようと思っています。
考えに考えたのですがうまくいきませんでした、みなさまの知恵を貸してください...!よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/02 05:11