2014-02-15 102 views
0

我試圖以.csv的形式從雅虎財務中提取數據,然後將第1列和第5列變爲Python中的列表。如果.csv以前已經下載過,那麼將這些列轉換爲列表的代碼部分是有用的,但我想要做的是將數據從url直接轉換爲Python。將。雅虎財務中的.csv轉換爲Python的列列表

我得到的錯誤是「屬性錯誤:'模塊'對象沒有屬性'請求'。」這裏是代碼:

import urllib 

def data_pull(): 
#gets data out of a .csv file from yahoo finance, separates specific columns into lists 

    datafile = urllib.request.urlretrieve('http://ichart.finance.yahoo.com/table.csv?s=xom&a=00&b=2&c=1999&d=01&e=12&f=2014&g=m&ignore=.csv') 
    datafile = open(datafile) 

    datelist = [] #blank list for dates 
    pricelist = [] #blank list for prices 
    for row in datafile: 
     datelist.append(row.strip().split(",")) 
     pricelist.append(row.strip().split(",")) 

    datelist = zip(*datelist) #rows into columns 
    datelist = datelist[0] #turns the list into data from the first column 

    pricelist = zip(*pricelist) 
    pricelist = pricelist[4] #list gets data from the fifth column 

    print datelist 
    print pricelist 

data_pull() 

我是全新的Python和編碼的一般。我知道有可能更有效的方式來執行上面的代碼,但我主要關心的是讓urllib一塊正常工作。預先感謝您的意見。

+1

如果您要使用表格數據 - 尤其是時間序列數據 - 我建議您查看圖書館像['pandas'](http://pandas.pydata.org)。否則,當你可以做更高效的事情時,你會花大量的時間來重新實現基本的功能。 – DSM

回答

5

需要導入完整的模塊:

import urllib.request 

如果不這樣做,父包將有子模塊作爲一個屬性。

你可能不想在這裏使用urllib.request.urlretrieve();你通常會直接用Python處理響應。您還可以使用csv module來讀取數據而不需要分割:

from urllib.request import urlopen 
import io 
import csv 

url = 'http://ichart.finance.yahoo.com/table.csv?s=xom&a=00&b=2&c=1999&d=01&e=12&f=2014&g=m&ignore=.csv' 
reader_input = io.TextIOWrapper(urlopen(url), encoding='utf8', newline='') 
reader = csv.reader(reader_input) 
next(reader, None) # skip headers 
cols = list(zip(*reader)) 
datelist, pricelist = cols[0], cols[4]