Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python解析为csv_Python_Parsing_Csv - Fatal编程技术网

将python解析为csv

将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

我试着下载一些比赛数据来做一些分析,唯一的问题是每个赛季他们的数据不是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'
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