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

Log*_*ic9 0 python csv list 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()
Run Code Online (Sandbox Code Playgroud)

我是Python和编码的新手.我知道可能有更有效的方法来执行上面的代码,但我主要担心的是让urllib片段正常运行.提前感谢您的意见.

Mar*_*ers 5

您需要导入完整模块:

import urllib.request
Run Code Online (Sandbox Code Playgroud)

如果不这样做,父包将不会将子模块作为属性.

你可能不想在urllib.request.urlretrieve()这里使用; 您通常直接在Python中处理响应.您还可以使用该csv模块读取数据而无需拆分:

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]
Run Code Online (Sandbox Code Playgroud)