我想了解如何从网址获取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"在第二个(我可以复制代码两次并硬编码这些值以获得正确的结果),但我无法弄清楚如何使这个迭代工作。相反,我得到一个缺少架构错误。
我做错了什么?
答案 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])