gpt4 book ai didi

python - 使用 Python 将多个请求写入一个 Csv

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:42 25 4
gpt4 key购买 nike

我在将几个脚本组合在一起时遇到问题。我尝试过将 writer.writerow 放置在几个不同的地方,但我已经没有想法了。正如您从输出中看到的,它循环执行最后一个循环并重复前两个循环,直到第三个循环完成,然后进入第二个循环。感谢您的浏览!

import csv
import requests
import os

outfile = open("NHL_Home_Skater.csv","a",newline='')
writer = csv.writer(outfile)
writer.writerow(["Date","Player","PlayerId","Pos","TM","Opp","GameId","GP","G","A","Points","Shots","Spctg","PPG","PPP","SHG","SHP","TOI","Shifts","PIM","Player","GameId","BS","Give Aways","Take Aways","Missed Shots","Player","GameId","EvTOI","PpTOI","ShTOI"])

req = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=true&reportName=skatersummary&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22}]&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameDate%3E=%222017-10-04%22%20and%20gameDate%3C=%222017-12-31%22%20and%20gameTypeId=2%20and%20gameLocationCode=%22H%22')
data = req.json()['data']
for item in data:
Player = item['playerName']
date = item['gameDate']
Pos = item['playerPositionCode']
TM = item['teamAbbrev']
Opp = item['opponentTeamAbbrev']
GameId = item['gameId']
GP = item['gamesPlayed']
G = item['goals']
A = item['assists']
Shots = item['shots']
PIM = item['penaltyMinutes']
PlayerId = item['playerId']
Points = item['points']
PPG = item['ppGoals']
PPP = item['ppPoints']
SHG = item['shGoals']
SHP = item['shPoints']
Shifts = item['shiftsPerGame']
Spctg = item['shootingPctg']
TOI = item['timeOnIcePerGame']

writer.writerow([date,Player,PlayerId,Pos,TM,Opp,GameId,GP,G,A,Points,Shots,Spctg,PPG,PPP,SHG,SHP,TOI,Shifts,PIM])

req2 = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=true&reportName=realtime&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22}]&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameDate%3E=%222017-10-04%22%20and%20gameDate%3C=%222017-12-31%22%20and%20gameTypeId=2%20and%20gameLocationCode=%22H%22')
data2 = req2.json()['data']
for item in data2:
Player2 = item['playerName']
GameId2 = item['gameId']
BS = item['blockedShots']
GiveAways = item['giveaways']
TakeAways = item['takeaways']
MissedShots = item['missedShots']

writer.writerow([Player,GameId,BS,GiveAways,TakeAways,MissedShots])

req3 = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=true&reportName=timeonice&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22}]&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameDate%3E=%222017-10-04%22%20and%20gameDate%3C=%222017-12-31%22%20and%20gameTypeId=2%20and%20gameLocationCode=%22H%22')
data3 = req3.json()['data']
for item in data3:
Player3 = item['playerName']
GameId3 = item['gameId']
EvTOI = item['evTimeOnIce']
PpTOI = item['ppTimeOnIce']
ShTOI = item['shTimeOnIce']

writer.writerow([Player, GameId, EvTOI, PpTOI, ShTOI])
outfile.close()

输出:

2017-10-28T23:00:00Z A.J. Greer 8478421 L COL CHI 2017020165 1 0 0 0 0 0.0 0 0 0 0 373.0 10.0 2 A.J. Greer 2017020165 0 0 1 0 A.J. Greer 2017020165 373 0 0
2017-10-28T23:00:00Z A.J. Greer 8478421 L COL CHI 2017020165 1 0 0 0 0 0.0 0 0 0 0 373.0 10.0 2 A.J. Greer 2017020165 0 0 1 0 A.J. Greer 2017020194 486 0 0
2017-10-28T23:00:00Z A.J. Greer 8478421 L COL CHI 2017020165 1 0 0 0 0 0.0 0 0 0 0 373.0 10.0 2 A.J. Greer 2017020165 0 0 1 0 A.J. Greer 2017020134 498 4 0
2017-10-28T23:00:00Z A.J. Greer 8478421 L COL CHI 2017020165 1 0 0 0 0 0.0 0 0 0 0 373.0 10.0 2 A.J. Greer 2017020165 0 0 1 0 Aaron Ekblad 2017020190 1035 88 126

新输出:

Date    Player  PlayerId    Pos TM  Opp GameId  GP  G   A   Points  Shots   Spctg   PPG PPP SHG SHP TOI Shifts  PIM

2017-11-02T23:00:00Z A.J. Greer 8478421 L COL CAR 2017020194 1 0 1 1 0 0 0 0 0 0 486 12 0

2017-10-28T23:00:00Z A.J. Greer 8478421 L COL CHI 2017020165 1 0 0 0 0 0 0 0 0 0 373 10 2

2017-10-24T23:00:00Z A.J. Greer 8478421 L COL DAL 2017020134 1 0 0 0 2 0 0 0 0 0 502 13 0

最佳答案

这道题并不难,因为复杂,而是因为数据量很大(接近10000行数据),加上每行大约有30+列。读完你的代码后,我相信我明白你想要的输出是什么:3组数据的组合。这是我的尝试:

import csv
import os
import requests

outfile = open("NHL_Home_Skater.csv", 'a', newline='')
writer = csv.writer(outfile)
header=[
"Date","Player","PlayerId","Pos","TM",
"Opp","GameId","GP","G","A",
"Points","Shots","Spctg","PPG","PPP",
"SHG","SHP","TOI", "Shifts", "PIM",

"Player2","GameId","BS","Give Aways","Take Aways", "Missed Shots",
"Player3","GameId","EvTOI","PpTOI","ShTOI"]
writer.writerow(header)

req = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=true&reportName=skatersummary&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22}]&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameDate%3E=%222017-10-04%22%20and%20gameDate%3C=%222017-12-31%22%20and%20gameTypeId=2%20and%20gameLocationCode=%22H%22')
data = req.json()['data']

req2 = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=true&reportName=realtime&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22}]&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameDate%3E=%222017-10-04%22%20and%20gameDate%3C=%222017-12-31%22%20and%20gameTypeId=2%20and%20gameLocationCode=%22H%22')
data2 = req2.json()['data']

req3 = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=true&reportName=timeonice&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22}]&factCayenneExp=gamesPlayed%3E=1&cayenneExp=gameDate%3E=%222017-10-04%22%20and%20gameDate%3C=%222017-12-31%22%20and%20gameTypeId=2%20and%20gameLocationCode=%22H%22')
data3 = req3.json()['data']

for item, item2, item3 in zip(data, data2, data3):
row = (
item['gameDate'],
item['playerName'],
item['playerId'],
item['playerPositionCode'],
item['teamAbbrev'],
item['opponentTeamAbbrev'],
item['gameId'],
item['gamesPlayed'],
item['goals'],
item['assists'],
item['points'],
item['shots'],
item['shootingPctg'],
item['ppGoals'],
item['ppPoints'],
item['shGoals'],
item['shPoints'],
item['timeOnIcePerGame'],
item['shiftsPerGame'],
item['penaltyMinutes'],

item2['playerName'],
item2['gameId'],
item2['blockedShots'],
item2['giveaways'],
item2['takeaways'],
item2['missedShots'],

item3['playerName'],
item3['gameId'],
item3['evTimeOnIce'],
item3['ppTimeOnIce'],
item3['shTimeOnIce'],
)
writer.writerow(row)

注释

  • 此解决方案仅发出 3 个请求,而不是数千万个请求
  • 根据您的代码,我假设 3 个数据集中的行具有相同的顺序,这意味着它们引用相同的玩家 ID 和游戏 ID。
  • 对于 3 个数据集中的每一行,我构造了一个包含 31 列的行用于输出,并且每个循环仅将其写出一次。
  • 只有 1 个循环,而不是 3 个嵌套循环。

关于python - 使用 Python 将多个请求写入一个 Csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47898711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com