Python - если _ не None: - PullRequest
       2

Python - если _ не None:

0 голосов
/ 28 апреля 2018

У меня есть скрипт, который я пытаюсь очистить от значения ключа, который не всегда есть. У меня проблема с моим заявлением IF. Это If Shotype is not None Я бы хотел, чтобы царапина была второстепенным типом, который является видом снятого выстрела, который, очевидно, появляется только тогда, когда выстрел происходит.

Сценарий:

import csv
import requests
import os

req = requests.get('https://statsapi.web.nhl.com/api/v1/game/2017010001/feed/live')
data = req.json()

my_data = []
pk = data['gameData']['game']['pk']
for item in data['liveData']['plays']['allPlays']:
    players = item.get('players')
    if players:
        player_a = players[0]['player']['fullName'] if len(players) > 0 else None
        player_b = players[1]['player']['fullName'] if len(players) > 1 else None
        player_c = players[2]['player']['fullName'] if len(players) > 2 else None
        player_d = players[3]['player']['fullName'] if len(players) > 3 else None
    else:
        player_a, player_b, player_c, player_d = None, None, None, None
        if  shotype is not None:
            shotype = item['result']['secondaryType']
            event = item['result']['event']
            shotype = item['result']['secondaryType']
            time = item['about']['periodTime']
            Tm = item.get('team', {}).get('triCode')
            coordinates_x, coordinates_y = item['coordinates'].get('x'), item['coordinates'].get('y')

my_data.append([pk, player_a, player_b, player_c, player_d, event, shotype, time, Tm, coordinates_x, coordinates_y])

headers = ["pk", "player_a", "player_b", "player_c", "player_d", "event", "shotype", "time", "Tm", "coordinates_x", "coordinates_y"]

with open('NHL_' + str(pk) + '_Indv_PBP.csv', "a", newline='') as f:
    writer = csv.writer(f)
    writer.writerow(headers)
    writer.writerows(my_data)
f.close()

JSON:

copyright   "NHL and the NHL Shield a…8. All Rights Reserved."
gamePk  2017010001
link    "/api/v1/game/2017010001/feed/live"
metaData    {…}
gameData    {…}
liveData    
 plays  
  allPlays  
   0    {…}
   1    {…}
   2    {…}
   3    {…}
   25   {…} 
    players 
     0   {…}
     1   {…}
      result    
       event    "Shot"
       eventCode    "LAK15"
       eventTypeId  "SHOT"
       description  "Markus Granlund Snap Sho…saved by Jonathan Quick"
       secondaryType    "Snap Shot"

Ссылка: https://statsapi.web.nhl.com/api/v1/game/2017010001/feed/live

1 Ответ

0 голосов
/ 28 апреля 2018

Вы должны проверить shotype после назначения. И я считаю, что вам нужно проверить, есть ли в словаре определенное ключевое слово, поэтому просто сделайте:

player_a, player_b, player_c, player_d = None, None, None, None
if 'result' in item:
    result = item['result']
    if 'secondaryType' in result:
        shotype = result['secondaryType']
        event = result['event']
if 'about' in item:
    about = item['about']
    if 'periodTime' in about:
        time = about['periodTime']
# ... and so on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...