Python 如何从世界银行下载CSV文件';s数据集

Python 如何从世界银行下载CSV文件';s数据集,python,csv,download,Python,Csv,Download,我想从世界银行的网站上自动下载CSV文件 我的问题是,与特定数据集对应的URL不会直接指向所需的CSV文件,而是对世界银行API的查询。例如,这是获取人均GDP数据的URL: 如果将此URL粘贴到浏览器中,它将自动开始下载相应的文件。因此,在当前情况下,我通常使用Python收集和保存CSV文件的代码不起作用: baseUrl = "http://api.worldbank.org/v2/en/indicator/ny.gdp.pcap.cd?downloadformat=csv" remote

我想从世界银行的网站上自动下载CSV文件

我的问题是,与特定数据集对应的URL不会直接指向所需的CSV文件,而是对世界银行API的查询。例如,这是获取人均GDP数据的URL:

如果将此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
有关更多信息,请参阅和


从这里,您可以使用您的方法来处理CSV文件。

只是一个建议,而不是解决方案。您可以使用
pd.read\u csv
直接从URL读取任何csv文件

import pandas as pd
data = pd.read_csv('http://url_to_the_csv_file')

我们有一个脚本,可以自动访问和提取世界银行世界发展指标的数据,如:

该脚本执行以下操作:

  • 下载元数据数据
  • 提取元数据和数据
  • 转换为
  • 该脚本基于python并使用python 3.0。它在标准库之外没有依赖项。试试看:

    python scripts/get.py
    
    python scripts/get.py https://data.worldbank.org/indicator/GC.DOD.TOTL.GD.ZS
    
    您还可以阅读我们对世界银行数据的分析:


    问题更可能是数据压缩。您需要先对其进行解压缩,然后才能使用它。哪些代码行可以完成此操作?您必须使用
    zipfile
    lib从zip包中提取数据。请尝试在Thank中执行以下过程,该过程有效,解决了我的问题,我也了解了有关StringIO library的一些新信息。谢谢,两个答案都很好,我把另一个标记为回答我问题的那个,只是因为它更“说教”。
    python scripts/get.py
    
    python scripts/get.py https://data.worldbank.org/indicator/GC.DOD.TOTL.GD.ZS