2017-06-20 11 views
1
def load_asn1_data(filename='songdata.csv'): 
    import csv 
    reader=csv.reader(open(filename,'r')) 
    songs=[] 
    for r in reader: 
     songs.append(r) 
    return songs 
def fastest_year(songs): 
    for row in songs: 
     title = row[0] 
     artist = row[1] 
     year = int(row[2]) 
     tempo = float(row[3]) 
     artist_hotness=float(row[4]) 
     duration = float(row[5]) 
     key = int(row[6]) 
     loudness = float(row[7]) 
     mode = int(row[8]) 
    for speed in tempo: 
     if tempo[speed]==max(tempo): 
      print year[speed] 

songs=load_asn1_data(filename='songdata.csv') 
fastest_year(songs) 

更新:最初のインデックスが行を参照するようになったので、各変数が対応するfor-loopを作成しました。行内の特定のインデックスの値これを実行しようとすると、新しいエラーが発生し、浮動オブジェクトは反復可能ではありません。私は多分浮動小数点のための最大の機能は動作しないと思ったが、私はそれをテストした。テンポクラスのすべての要素について、そのインデックスのテンポが最大の場合、そのテンポに関連付けられた年を印刷するように、最後のfor-loopを解釈するので、私は混乱します。Int引数は文字列でもリストでもない数でなければならないcsv

+0

'songdata.csv'には何がありますか? – FamousJameous

+0

'fastest_year(songs)'の前に 'print(songs [2])'を実行して出力を表示できますか? – Slam

+0

曲[0]はどのように見えますか?つまり、データ形式を理解するために見てみましょう。最も可能性の高いsongs.csvは、列にメタデータを含む行です。つまり、曲[r]はcsvの行だけで、曲[r] [c]はcsvの特定のフィールドです。 – JCR000

答えて

0

これはあなたがされるエラーの場合:

TypeError: int() argument must be a string or a number, not 'list'

を、あなたのsongs[2]はこの[2010]または[xxxx, xxxx]

ようなものかもしれませんsongs[2]またはtype(songs[2])

してくださいいずれかを印刷し、それを確認してくださいそれを歌にする[2] [0]

year = int(songs[2][0]) 
0

songsは、fastest_year関数の実際の行ではなく列にアクセスするリストです。 songsの各行を調べて、必要な値を取得する必要があります。コードはそれがあなたの目的のために、正確に動作する場合、私が言うことはできません行うことを意味している正確に何を知らずにいるが

songs=load_asn1_data(filename='songdata.csv') 
for song in songs: 
    fastest_year(song) 

:ような何か。

関連する問題