将.csv从yahoo finance转变为使用Python的列列表

时间:2014-02-15 20:24:42

标签: python list csv urllib yahoo-finance

我试图以.csv的形式从雅虎财经中提取数据,然后将第1列和第5列转换为Python中的列表。如果先前已经下载了.csv,那么将列转换为列表的代码部分是有用的,但我正在尝试做的是直接将数据从url获取到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 个答案:

答案 0 :(得分: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]