如何从世界银行的数据集中下载 CSV 文件
How to download a CSV file from the World Bank's dataset
我想自动从世界银行 dataset 下载 CSV 文件。
我的问题是对应于特定数据集的 URL 不会直接导致所需的 CSV 文件,而是对世界银行的 API 的查询。举个例子,这是获取人均GDP数据的URL:http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv.
如果您将此 URL 粘贴到您的浏览器中,它会自动开始下载相应的文件。因此,我通常用来在 Python 中收集和保存 CSV 文件的代码在目前的情况下不起作用:
baseUrl = "http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv"
remoteCSV = urllib2.urlopen("%s" %(baseUrl))
myData = csv.reader(remoteCSV)
我应该如何修改我的代码才能将来自查询的文件下载到 API?
这将下载 zip,打开它并为您提供一个 csv 对象,其中包含您想要的任何文件。
import urllib2
import StringIO
from zipfile import ZipFile
import csv
baseUrl = "http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv"
remoteCSV = urllib2.urlopen(baseUrl)
sio = StringIO.StringIO()
sio.write(remoteCSV.read())
# We create a StringIO object so that we can work on the results of the request (a string) as though it is a file.
z = ZipFile(sio, 'r')
# We now create a ZipFile object pointed to by 'z' and we can do a few things here:
print z.namelist()
# A list with the names of all the files in the zip you just downloaded
# We can use z.namelist()[1] to refer to 'ny.gdp.pcap.cd_Indicator_en_csv_v2.csv'
with z.open(z.namelist()[1]) as f:
# Opens the 2nd file in the zip
csvr = csv.reader(f)
for row in csvr:
print row
有关详细信息,请参阅 ZipFile Docs and StringIO Docs
import os
import urllib
import zipfile
from StringIO import StringIO
package = StringIO(urllib.urlopen("http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv").read())
zip = zipfile.ZipFile(package, 'r')
pwd = os.path.abspath(os.curdir)
for filename in zip.namelist():
csv = os.path.join(pwd, filename)
with open(csv, 'w') as fp:
fp.write(zip.read(filename))
print filename, 'downloaded successfully'
从这里您可以使用您的方法来处理 CSV 文件。
只是建议而不是解决方案。您可以使用 pd.read_csv
直接从 URL 读取任何 csv 文件。
import pandas as pd
data = pd.read_csv('http://url_to_the_csv_file')
我们有一个脚本可以自动访问和提取世界银行世界发展指标的数据,例如:https://data.worldbank.org/indicator/GC.DOD.TOTL.GD.ZS
该脚本执行以下操作:
- 正在下载元数据数据
- 提取元数据和数据
- 转换为 Data Package
该脚本基于 python 并使用 python 3.0。它没有标准库之外的依赖项。试一试:
python scripts/get.py
python scripts/get.py https://data.worldbank.org/indicator/GC.DOD.TOTL.GD.ZS
您还可以阅读我们对世界银行数据的分析:
我想自动从世界银行 dataset 下载 CSV 文件。
我的问题是对应于特定数据集的 URL 不会直接导致所需的 CSV 文件,而是对世界银行的 API 的查询。举个例子,这是获取人均GDP数据的URL:http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv.
如果您将此 URL 粘贴到您的浏览器中,它会自动开始下载相应的文件。因此,我通常用来在 Python 中收集和保存 CSV 文件的代码在目前的情况下不起作用:
baseUrl = "http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv"
remoteCSV = urllib2.urlopen("%s" %(baseUrl))
myData = csv.reader(remoteCSV)
我应该如何修改我的代码才能将来自查询的文件下载到 API?
这将下载 zip,打开它并为您提供一个 csv 对象,其中包含您想要的任何文件。
import urllib2
import StringIO
from zipfile import ZipFile
import csv
baseUrl = "http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv"
remoteCSV = urllib2.urlopen(baseUrl)
sio = StringIO.StringIO()
sio.write(remoteCSV.read())
# We create a StringIO object so that we can work on the results of the request (a string) as though it is a file.
z = ZipFile(sio, 'r')
# We now create a ZipFile object pointed to by 'z' and we can do a few things here:
print z.namelist()
# A list with the names of all the files in the zip you just downloaded
# We can use z.namelist()[1] to refer to 'ny.gdp.pcap.cd_Indicator_en_csv_v2.csv'
with z.open(z.namelist()[1]) as f:
# Opens the 2nd file in the zip
csvr = csv.reader(f)
for row in csvr:
print row
有关详细信息,请参阅 ZipFile Docs and StringIO Docs
import os
import urllib
import zipfile
from StringIO import StringIO
package = StringIO(urllib.urlopen("http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv").read())
zip = zipfile.ZipFile(package, 'r')
pwd = os.path.abspath(os.curdir)
for filename in zip.namelist():
csv = os.path.join(pwd, filename)
with open(csv, 'w') as fp:
fp.write(zip.read(filename))
print filename, 'downloaded successfully'
从这里您可以使用您的方法来处理 CSV 文件。
只是建议而不是解决方案。您可以使用 pd.read_csv
直接从 URL 读取任何 csv 文件。
import pandas as pd
data = pd.read_csv('http://url_to_the_csv_file')
我们有一个脚本可以自动访问和提取世界银行世界发展指标的数据,例如:https://data.worldbank.org/indicator/GC.DOD.TOTL.GD.ZS
该脚本执行以下操作:
- 正在下载元数据数据
- 提取元数据和数据
- 转换为 Data Package
该脚本基于 python 并使用 python 3.0。它没有标准库之外的依赖项。试一试:
python scripts/get.py
python scripts/get.py https://data.worldbank.org/indicator/GC.DOD.TOTL.GD.ZS
您还可以阅读我们对世界银行数据的分析: