2017-12-16 6 views
-2

私はこのAPIで行のダイナミックレンジを持っています。私はいくつかの以前のwhileループの使用を見てきましたが、このスクリプトのforループをwhileループのために交換する方法を見つけることはできません。whileループをwhileループのpythonに置き換える

header = ["fanduel", "fd_first_name", "fd_last_name", "fd_player_salary", "draftkings", "dk_first_name", "dk_last_name", "dk_player_salary"] 
headers = { 
     "Authorization": "Basic " + 
       base64.b64encode('{}:{}'.format(USERNAME,PASSWORD)\ 
           .encode('utf-8')).decode('ascii') 
    } 

with open("dailydfs.csv", 'w', newline='') as f: 
    writer = csv.writer(f) 
    writer.writerow(header) 
    for fordate in range(20171215,20171216): #ENTER DATE'S 
     req = requests.get(url="https://api.mysportsfeeds.com/v1.1/pull/nhl/2017-2018-regular/daily_dfs.json?fordate=" + str(fordate) , headers=headers) 
     req.raise_for_status() 
     data = req.json() 

     daily_dfs = data['dailydfs'] 

     fanduel = daily_dfs['dfsEntries'][0]['dfsType'] 
     draftkings = daily_dfs['dfsEntries'][1]['dfsType'] 

     for i in range(20): 

      fd_player = daily_dfs['dfsEntries'][0]['dfsRows'][i]['player'] 
      salary_fd = daily_dfs['dfsEntries'][0]['dfsRows'][i] 
      fd_last_name = fd_player['LastName'] 
      fd_first_name = fd_player['FirstName'] 
      fd_player_salary = salary_fd['salary'] 

      dk_player = daily_dfs['dfsEntries'][1]['dfsRows'][i]['player'] 
      salary_dk = daily_dfs['dfsEntries'][1]['dfsRows'][i] 
      dk_last_name = dk_player['LastName'] 
      dk_first_name = dk_player['FirstName'] 
      dk_player_salary = salary_dk['salary'] 

      writer.writerow([fanduel, fd_first_name, fd_last_name, fd_player_salary, draftkings, dk_first_name, dk_last_name, dk_player_salary]) 
      print(fanduel, fd_first_name, fd_last_name, fd_player_salary, draftkings, dk_first_name, dk_last_name, dk_player_salary) 

OUTPUT:daily_dfs['dfsEntries'][0]['dfsRows']daily_dfs['dfsEntries'][1]['dfsRows']の両方が同じ数の要素を持っているという仮定の下で

FanDuel Jonathan Quick 8800 DraftKings Martin Jones  8400 
FanDuel Henrik Lundqvist 8600 DraftKings Aaron Dell  8300 
FanDuel Frederik Andersen 8500 DraftKings Frederik Andersen 8200 
FanDuel Martin Jones  8500 DraftKings Curtis McElhinney 8100 
FanDuel Ben Bishop  8500 DraftKings Cory Schneider 7900 
FanDuel Cory Schneider 8200 DraftKings Tyler Seguin  7800 
+0

お話はありますか? – CodeCollector

+0

ある日、他の人よりも多くの「選手」が遊んでいます。私がforループに置いておくと、どれくらいの数が存在しているかを確認し、毎日 'range()'を変更する必要があります。スクリプトのポイントは、プロセスを自動化することです。 –

答えて

2

、あなたはすなわち

、最初のものを列挙し、第二の取得時にインデックスを使用することができます
for i, fd_info in enumerate(daily_dfs['dfsEntries'][0]['dfsRows']): 
    fd_player = fd_info['player'] 
    fd_last_name = fd_player['LastName'] 
    fd_first_name = fd_player['FirstName'] 
    fd_player_salary = fd_info['salary'] 

    dk_info = daily_dfs['dfsEntries'][1]['dfsRows'][i] 
    dk_player = dk_info['player'] 
    dk_last_name = dk_player['LastName'] 
    dk_first_name = dk_player['FirstName'] 
    dk_player_salary = dk_info['salary'] 

    # etc. 
+0

申し訳ありませんが、私はそれを指定しませんでした。彼らは同じ数の要素を持たないでしょう。通常、2番目の 'dk_'はより多くの情報を持ちます。 –

+1

@MichaelTJohnson - 同じテーブル行にどのように参加する予定ですか? – zwer

+0

編集:上記の出力を参照してください。 dkは一般的にもっと多くのプレーヤーを持っているので、 'fd_info'を' dk_info'に切り替えるだけですが、 'fd_info = daily_dfs ['dfsEntries'] [0] ['dfsRows'] [i] IndexError:範囲 ' –

0
i = 0 
while i < 20: 
    fd_player = daily_dfs['dfsEntries'][0]['dfsRows'][i]['player'] 
    salary_fd = daily_dfs['dfsEntries'][0]['dfsRows'][i] 
    fd_last_name = fd_player['LastName'] 
    fd_first_name = fd_player['FirstName'] 
    fd_player_salary = salary_fd['salary'] 

    dk_player = daily_dfs['dfsEntries'][1]['dfsRows'][i]['player'] 
    salary_dk = daily_dfs['dfsEntries'][1]['dfsRows'][i] 
    dk_last_name = dk_player['LastName'] 
    dk_first_name = dk_player['FirstName'] 
    dk_player_salary = salary_dk['salary'] 

    writer.writerow([fanduel, fd_first_name, fd_last_name, fd_player_salary, draftkings, dk_first_name, dk_last_name, 
        dk_player_salary]) 
    print(
    fanduel, fd_first_name, fd_last_name, fd_player_salary, draftkings, dk_first_name, dk_last_name, dk_player_salary) 
    i+=1 
+0

ありがとうございますが、これは最初の要素を引き出し、それらのすべてを実行しません。 –