2017-11-28 3 views
0

私はPythonでテキストベースのspotifyプログラムを作成しています。私の友人の一人がこれを学校の仕事として持っていて、彼は私に興味がありました!タスクの1つは、ランダムなプレイリストを生成することです。私が立ち往生しているのは、ジャンル別にランダムなプレイリストを生成することです。配列/ csvファイルに追加する時間を制限する方法 - テキストベースのスポット

5a。そのジャンルの少なくとも5曲のジャンル別ランダムプレイリストを生成します。

約20曲のCSVファイルがあります。次の情報があります。 曲名|アーティスト|ジャンル|トラックの長さ

これは、これまでの私の現在のコードです:私が持っている

import random 
import csv 

genre_list = ["Pop","Rock","Rap"] 
playlist = [] 

random_genre = random.choice(genre_list) 

data = list(csv.reader(open("song.csv"))) 
name = input("Enter name for the playlist: ") 

for row in range(len(data)): 
    if random_genre == data[row][2]: 
     playlist.append(data[row]) 

print(playlist) 
newfile = open(name + ".csv","w") 
for i in range(len(playlist)): 
    newfile.write(str(playlist[i][0]+","+playlist[i][1]+","+playlist[i] 
[2]+","+playlist[i][3])) 
    newfile.write(str("\n")) 
newfile.close() 
print("done! ") 

唯一の問題は、それがそのジャンルからすべての曲を追加していることです。 5曲に制限するにはどうすればいいですか?事前に

感謝:)

答えて

0

は単純であるため、基本的にあなたが容易な、playlistに入れますどのように多くの曲をカウントする必要があるプレイリスト

for row in range(len(data)): 
    if random_genre == data[row][2] and len(playlist) < 5: 
     playlist.append(data[row]) 
+0

私は信じることができない、私は気づいていなかったこの、感謝:

は、ここで、実質的にすべてのこれらの事を行うにはどのようにあなたのコードのショーの書き換えです! –

+0

ようこそ、それはあなたの問題を解決した場合、これは他の人にも役立ちます答えとしてマーク –

0
genre_songs = [song for song in data if song[2] == random_genre] 
playlist = random.sample(genre_songs,5) 
0

の長さをチェックしますその長さはいつでもlen(playlist)です。

また、csvモジュールを利用しているのではなく、with文を開くときにPythonが自動的にファイルを閉じる方法もありません。命の恩人 -

import random 
import csv 

genre_list = "Pop","Rock","Rap" 
random_genre = random.choice(genre_list) 

name = input("Enter name for the playlist: ") 
MAX_SONGS = 5 

playlist = [] 
with open("song.csv", "r", newline="") as file: 
    for row in csv.reader(file): 
     if row[2] == random_genre: 
      playlist.append(row) 
      if len(playlist) >= MAX_SONGS: 
       break 

print(playlist) 

newfilename = name + ".csv" 
with open(newfilename, "w", newline="") as newfile: 
    writer = csv.writer(newfile) 
    writer.writerows(playlist) 

print("done!") 
関連する問題