将python解析为csv
我试着下载一些比赛数据来做一些分析,唯一的问题是每个赛季他们的数据不是100%一致的 我从站点获取json文件,然后希望将其保存到csv中,csv中的第一行包含该列的标题,因此标题基本上是python数据类型中的键将python解析为csv,python,parsing,csv,Python,Parsing,Csv,我试着下载一些比赛数据来做一些分析,唯一的问题是每个赛季他们的数据不是100%一致的 我从站点获取json文件,然后希望将其保存到csv中,csv中的第一行包含该列的标题,因此标题基本上是python数据类型中的键 #!/usr/bin/env python import requests import json import csv base_url = 'http://www.afl.com.au/api/cfs/afl/' token_url = base_url + 'WMCTok
#!/usr/bin/env python
import requests
import json
import csv
base_url = 'http://www.afl.com.au/api/cfs/afl/'
token_url = base_url + 'WMCTok'
player_url = base_url + 'matchItems/round'
def printPretty(data):
print(json.dumps(data, sort_keys=True, indent=2, separators=(',', ': ')))
session = requests.Session() # session makes it simple to use the token across the requests
token = session.post(token_url).json()['token'] # get the token
session.headers.update({'X-media-mis-token': token}) # set the token
Season = 2014
Roundno = 4
if Roundno<10:
strRoundno = '0'+str(Roundno)
else:
strRoundno = str(Roundno)
# get some data (could easily be a for loop, might want to put in a delay using Sleep so that you don't get IP blocked)
data = session.get(player_url + '/CD_R'+str(Season)+'014'+strRoundno)
# print everything
printPretty(data.json())
with open('stats_game_test.csv', 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter="'",quotechar='|', quoting=csv.QUOTE_ALL)
for profile in data.json()['items']:
spamwriter.writerow(['%s' %(profile)])
#for key in data.json().keys():
# print("key: %s , value: %s" % (key, data.json()[key]))
我想要的是这样的数据
Column A B
'tempInCelsius': 17.0 'totalScore': 32
'tempInCelsius': 16.0 'totalScore': 28
tempInCelsius totalScore
17 32
16 28
正如我在顶部提到的,数据并不总是一致的,因此如果我定义了使用spamwriter.writerow([profile['tempInCelsius'],profile['totalScore'])获取哪些字段,那么它将在某些数据获取中出错
这就是为什么我现在尝试上面的方法,所以不管有什么数据,它都会抓取所有内容。您想先写一个标题吗 spamwriter.writerow('tempInCelsius','totalScore')#如果您假定列名为其他列名,请按键或其他方式获取它们 然后为循环写入值
spamwriter.writerow([profile['tempincelius',profile['totalScore'])你能清楚地报告你从程序中得到了什么以及你需要什么吗?显示源文件这是我也做过的,但问题是,例如在2010年,没有记录tempincelius,因此,如果我循环这些年,它将出错,所有数据现在都与标题不一致。它需要是dynamic.wel,在这种情况下,您可以在完整数据上迭代一次并从中收集所有键,然后写入标题行,后跟一些if-key-in-data:write-to-file