2017-08-08 74 views
0

我想學習如何從URL中獲得CSV文件。通過遍歷多個URL CSV字符串在Python

雖然我可以通過硬編碼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 

如果它是不明確的,我希望「我」在下載= s.get(I),成爲第二(我可以複製的代碼在第一次循環「CSV_URL_1」和「CSV_URL_2」兩次硬編碼這些值來得到正確的結果),但我無法弄清楚如何使這項工作的迭代。相反,我得到一個丟失的模式錯誤。

我在做什麼錯?

回答

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://。你的代碼是計算變量然後試圖用這個名字,就好像它是一個變量

而是執行此操作:

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]) 
+0

爾加。謝謝你的解釋! – AwfulPersimmon