Python解析的json输出到CSV

Python解析的json输出到CSV,python,json,csv,Python,Json,Csv,我已经用python解析了一个json文件,并将结果打印在屏幕上 但是,我也希望结果输出到csv文件,与屏幕上显示的完全相同 这是我的密码: import json with open('euroinc.json') as json_data: d = json.load(json_data) for p in d['results']: print(p['sedol']+','+p['company']+','+p['name']+','+ p['unitTy

我已经用python解析了一个json文件,并将结果打印在屏幕上

但是,我也希望结果输出到csv文件,与屏幕上显示的完全相同

这是我的密码:

import json

with open('euroinc.json') as json_data:
    d = json.load(json_data)
    for p in d['results']:
        print(p['sedol']+','+p['company']+','+p['name']+','+ p['unitType']+','+p['perf48t60m']+','+p['perf36t48m']+','+p['perf24t36m']+','+p['perf12t24m']+','+p['perf12m']+','+p['initialCharge']+','+p['netAnnualCharge'])
任何帮助都将不胜感激! 谢谢 克雷格

更新:以下是json示例:

{
  "results": [
    {
      "sector": "Europe Including UK", 
      "perf48t60m": "n/a", 
      "discountedCode": "", 
      "price_buy": "0", 
      "plusFund": false, 
      "unitType": "Accumulation", 
      "perf6m": "6.35%", 
      "perf36t48m": "11.29%", 
      "loaded": "Unbundled", 
      "fundSize": "2940.1", 
      "annualCharge": "1.07", 
      "netAnnualCharge": "1.07", 
      "sedol": "B7BW9Y0", 
      "perf24t36m": "0.25%", 
      "annualSaving": "0.00", 
      "updated": "06/09/2017", 
      "incomeFrequency": "N/a", 
      "perf60m": "n/a", 
      "perf12t24m": "12.97%", 
      "company": "BlackRock", 
      "initialCharge": "0.00", 
      "paymentType": "Dividend", 
      "perf3m": "0.32%", 
      "name": "BlackRock Global European Value (D2 GBP)", 
      "perf12m": "19.37%", 
      "price_change": "-39.00", 
      "yield": "0.00", 
      "price_sell": "6569.00", 
      "perf36m": "35.19%", 
      "numHoldings": "51"
    }, 
    {
      "sector": "Europe Including UK", 
      "perf48t60m": "22.01%", 
      "discountedCode": "", 
      "price_buy": "0", 
      "plusFund": false, 
      "unitType": "Income", 
      "perf6m": "7.81%", 
      "perf36t48m": "9.61%", 
      "loaded": "Unbundled", 
      "fundSize": "566.1", 
      "annualCharge": "0.30", 
      "netAnnualCharge": "0.30", 
      "sedol": "B76VTR5", 
      "perf24t36m": "-3.95%", 
      "annualSaving": "0.00", 
      "updated": "06/09/2017", 
      "incomeFrequency": "Quarterly", 
      "perf60m": "77.38%", 
      "perf12t24m": "15.38%", 
      "company": "Vanguard", 
      "initialCharge": "0.00", 
      "paymentType": "Dividend", 
      "perf3m": "0.74%", 
      "name": "Vanguard SRI European Stock", 
      "perf12m": "19.69%", 
      "price_change": "-21.37", 
      "yield": "2.79", 
      "price_sell": "15800.81", 
      "perf36m": "32.65%", 
      "numHoldings": "502"
    }
  ]
}

我想p是一本字典

你可以试试:

for p in d['results']:
    for key in p.keys():
        result = a[i]+',',
print result
import csv 
csv_file = open('your_csv.csv', 'wb') 
csv_outp = csv.writer(csv_file, delimiter=',') 
csv_outp.writerow(result)
对于csv部分,您可以尝试:

for p in d['results']:
    for key in p.keys():
        result = a[i]+',',
print result
import csv 
csv_file = open('your_csv.csv', 'wb') 
csv_outp = csv.writer(csv_file, delimiter=',') 
csv_outp.writerow(result)

我希望这对您有所帮助

这将编写一个带有标题的CSV文件。注意
fieldnames
extrasaction
参数是指定列顺序和防止出现额外字典条目时出错所必需的

#!python2
import json
import csv

with open('euroinc.json') as json_data:
    d = json.load(json_data)

# with open('out.csv','w',newline='') as f:  # Python 3 version
with open('out.csv','wb') as f:
    w = csv.DictWriter(f,
                       fieldnames='sedol company name unitType perf48t60m perf36t48m perf24t36m perf12t24m perf12m initialCharge netAnnualCharge'.split(),
                       extrasaction='ignore')
    w.writeheader()
    # Ways to use a different header.
    # Note the direct write should use \r\n as that is the default 'excel' CSV dialect for line terminator.
    # f.write('A,B,C,D,E,F,G,H,I,J,K\r\n')
    # w.writerow(dict(zip(w.fieldnames,'col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11'.split())))
    w.writerows(d['results'])
输出:

sedol,company,name,unitType,perf48t60m,perf36t48m,perf24t36m,perf12t24m,perf12m,initialCharge,netAnnualCharge
B7BW9Y0,BlackRock,BlackRock Global European Value (D2 GBP),Accumulation,n/a,11.29%,0.25%,12.97%,19.37%,0.00,1.07
B76VTR5,Vanguard,Vanguard SRI European Stock,Income,22.01%,9.61%,-3.95%,15.38%,19.69%,0.00,0.30

一个json样本将非常感谢复制输出!谢谢-添加了json:)几个条目(格式正确)就足够了。谢谢-但是它显示了这个错误。我错过什么了吗?回溯(最后一次调用):文件“C:/Users/craig/Documents/FundRun/Test.py”,第12行,在w.writeheader()文件“C:\Python3\lib\csv.py”,第142行,在writeheader self.writerow(头)文件“C:\Python3\lib\csv.py”,第153行,在writerow中返回self.writerow.writerow(self.\dict\u-to\u-list(rowdict))TypeError:bytes-like对象是必需的,而不是'str'@Craig编写的代码是为Python2编写的,但是有一个注释掉的行,应该用于Python3。您缺少的是在问题中指定Python版本:^)谢谢Mark。我会在早上试一试哦,我可以指定标题名吗?如果标题名不同于字典键,那么您可以使用
w.writerow(['name1','name2',…])
而不是
w.writeheader()
手动编写标题名。