我不太明白如何从数据集中下载数据。我只下载了一个文件,而且还有好几个。我怎么解决这个问题? 我正在使用 hdx api 库。文档中有一个小例子。返回给我一个列表,我使用下载方法。但仅下载列表中的第一个文件,而不是全部。
我的代码
from hdx.hdx_configuration import Configuration
from hdx.data.dataset import Dataset
Configuration.create(hdx_site='prod', user_agent='A_Quick_Example', hdx_read_only=True)
dataset = Dataset.read_from_hdx('novel-coronavirus-2019-ncov-cases')
resources = dataset.get_resources()
print(resources)
url, path = resources[0].download()
print('Resource URL %s downloaded to %s' % (url, path))
我尝试使用不同的方法,但只有这个有效,似乎循环中出现某种错误,但我不明白如何解决它。
结果
Resource URL https://data.humdata.org/hxlproxy/api/data-preview.csv?url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_confirmed_global.csv&filename=time_series_covid19_confirmed_global.csv downloaded to C:\Users\tred1\AppData\Local\Temp\time_series_covid19_confirmed_global.csv.CSV
忘记补充一点,我得到了一个包含下载网址值的字符串列表。可能问题出在循环中
当我使用 for 循环时,我得到这个:
for res in resources:
print(res)
res[0].download()
Traceback (most recent call last):
File "C:/Users/tred1/PycharmProjects/pythonProject2/HDXapi.py", line 31, in <module>
main()
File "C:/Users/tred1/PycharmProjects/pythonProject2/HDXapi.py", line 21, in main
res[0].download()
File "C:\Users\tred1\AppData\Local\Programs\Python\Python38\lib\collections\__init__.py", line 1010, in __getitem__
raise KeyError(key)
KeyError: 0
您可以通过以下方式获取下载链接:
dataset = Dataset.read_from_hdx('acled-conflict-data-for-africa-1997-lastyear')
lita_resources = dataset.get_resources()
dictio=lista_resources[1]
url=dictio['download_url']
您可以使用以下代码实现您想要的效果,该代码从 HDX 下载数据集中的每个资源,并显示下载的 url 以及文件下载的路径。
from hdx.api.configuration import Configuration
from hdx.data.dataset import Dataset
Configuration.create(hdx_site="prod", user_agent="A_Quick_Example", hdx_read_only=True)
dataset = Dataset.read_from_hdx("novel-coronavirus-2019-ncov-cases")
resources = dataset.get_resources()
for res in resources:
url, path = res.download()
print(f"Resource URL {url} downloaded to {path}")
您可以使用
res.download("FOLDER")
提供要下载的文件夹。