我试图以.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片段正常运行。提前感谢您的意见。
答案 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]