迭代Python中的多个URL CSV字符串

时间:2017-08-08 21:22:51

标签: python csv url

我想了解如何从网址获取CSV文件。

虽然我可以通过硬编码CSV字符串变量的名称来使下面的代码工作,但我想学习如何迭代许多CSV字符串。

import csv
import requests

CSV_URL_1 = 'https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_1994-2003_CDC_NCHS.csv'
CSV_URL_2 = 'https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_2000-2014_SSA.csv'

csv_list = []

for i in range(1,3):
    concat = "CSV_URL_" + str(i)
    csv_list.append(concat)

with requests.Session() as s:
    csv_list_dict = {}
    for i in csv_list:
        download = s.get(i) #This part is the problem
        decoded_content = download.content.decode('utf-8')
        cr= csv.reader(decoded_content.splitlines(), delimiter=',')
        my_list = list(cr)
        csv_list_dict[i]=my_list

csv_list_dict

如果不清楚,我想要"我"在download = s.get(i)中成为" CSV_URL_1"在第一次迭代和" CSV_URL_2"在第二个(我可以复制代码两次并硬编码这些值以获得正确的结果),但我无法弄清楚如何使这个迭代工作。相反,我得到一个缺少架构错误。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

执行此操作时:

concat = "CSV_URL_" + str(i)
csv_list.append(concat)

您将字符串"CSV_URL_1""CSV_URL_2"放在csv_list中。

但是你的代码第一次这样做:

download = s.get(i)

你显然希望这意味着

download = s.get('https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_1994-2003_CDC_NCHS.csv')

但它没有。这意味着

download = s.get("CSV_URL_1")

现在您可以看到为什么会出现缺少的架构错误。 URL中没有https://。您的代码正在计算变量 name ,然后尝试使用该名称,就像它是变量一样。

请改为:

CSV_URL = ['https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_1994-2003_CDC_NCHS.csv', 'https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_2000-2014_SSA.csv']

for i in range(2):
    download = s.get(CSV_URL[i])