Превращение .csv из Yahoo Finance в списки столбцов с помощью Python

Я пытаюсь получить данные из 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 работать правильно. Заранее благодарю за ваши комментарии.


person Logic9    schedule 15.02.2014    source источник
comment
Если вы собираетесь работать с табличными данными, особенно с данными временных рядов, я бы порекомендовал обратить внимание на такую ​​библиотеку, как pandas. В противном случае вы потратите много времени на повторную реализацию базовой функциональности, когда могли бы сделать что-то более продуктивное.   -  person DSM    schedule 16.02.2014


Ответы (1)


Вам нужно импортировать полный модуль:

import urllib.request

Если вы этого не сделаете, родительский пакет не будет иметь подмодуль в качестве атрибута.

Вы, вероятно, не хотите использовать здесь 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]
person Martijn Pieters    schedule 15.02.2014