簡體   English   中英

來自Python的發布請求中的JSON查詢並將結果保存為csv文件

[英]JSON query in a post request from Python and save result as csv file

我正在嘗試編寫一個將連接到指定網址的程序:

http://api.scb.se/OV0104/v1/doris/sv/ssd/START/BO/BO0104/BostadsbestandK

並使用以下查詢:

{ "query": [ { "code": "Region", "selection": { "filter": "vs:RegionRiket99", "values": [ "00" ] } }, { "code": "Hustyp", "selection": { "filter": "item", "values": [ "FLERBO", "SMÅHUS" ] } }, { "code": "Tid", "selection": { "filter": "item", "values": [ "2012" ] } } ], "response": { "format": "csv" } }

然后,我想將結果存儲到一個csv文件中。

這是我到目前為止的代碼:

import urllib.request
import json

url = 'http://api.scb.se/OV0104/v1/doris/sv/ssd/START/BO/BO0104/BostadsbestandK'

data = '{ "query": [ { "code": "Region", "selection": { "filter": "vs:RegionRiket99", "values": [ "00" ] } }, { "code": "Hustyp", "selection": { "filter": "item", "values": [ "FLERBO", "SMÅHUS" ] } }, { "code": "Tid", "selection": { "filter": "item", "values": [ "2012" ] } } ], "response": { "format": "csv" } }'
data = json.dumps(data)

應該定義查詢為字符串; 留下一個Python對象:

data = { "query": [ { "code": "Region", "selection": { "filter": "vs:RegionRiket99", "values": [ "00" ] } }, { "code": "Hustyp", "selection": { "filter": "item", "values": [ "FLERBO", "SMÅHUS" ] } }, { "code": "Tid", "selection": { "filter": "item", "values": [ "2012" ] } } ], "response": { "format": "csv" } }
data = json.dumps(data)

您需要設置一個application/json請求標頭以指示內容。 您可以使用urllib.request.Request()對象來實現; 請先將JSON數據編碼為UTF-8:

request = urllib.request.Request(url, data.encode('utf8'))
request.add_header('content-type', 'application/json')
response = urllib.request.urlopen(request)

現在您可以將CSV保存到文件; 使用shutil.copyfileobj()即使對於較大的響應也可以使此效率高:

import shutil

with open(csvfilename, 'wb') as outf:
    shutil.copyfileobj(response, outf)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM