使用Python 3.4从Yahoo读取股票数据,但无法删除数据
我正在使用Python 3.4,想从Yahoo财经下载数据。
下面是我的代码:
import urllib.request
url = 'http://ichart.finance.yahoo.com/table.csv?s=aapl&a=6&b=21&c=2014&d=6&e=29&f=2014'
csv = urllib.request.urlopen(url).readlines()
print(csv)
ds,open_,high,low,close,volume,adjc = csv[1].strip().split('\n')
结果:
[b'Date,Open,High,Low,Close,Volume,Adj Close\n', b'2014-07-29,99.33,99.44,98.25,98.38,43031400,98.38\n', b'2014-07-28,97.82,99.24,97.55,99.02,55239000,99.02\n', b'2014-07-25,96.85,97.84,96.64,97.67,43403200,97.67\n', b'2014-07-24,97.04,97.32,96.42,97.03,45663100,97.03\n', b'2014-07-23,95.42,97.88,95.17,97.19,92844700,97.19\n', b'2014-07-22,94.68,94.89,94.12,94.72,54914800,94.72\n', b'2014-07-21,94.99,95.00,93.72,93.94,38887700,93.94\n']
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
ds,open_,high,low,close,volume,adjc = csv[1].strip().split('\n')
TypeError: Type str doesn't support the buffer API
现在我遇到的问题是,当我尝试把csv文件分割开,并把每一行存储为一个单独的值时,遇到了困难。
我想分割并存储报价,但我做不到,因为每行前面都有一个'b'字符,后面还有一个'\n'换行符。你们能帮我分割一下,或者给我推荐一个其他的写法吗?
非常感谢你们的帮助。
谢谢!
1 个回答
2
1) 我觉得 requests
这个库比 urllib.request
要简单得多。
2) 如果数据是CSV格式的,我建议使用 csv
模块,而不是自己去解析文件。
下面是我会怎么做:
#!/usr/bin/python3
import requests
import csv
import pprint
url='http://ichart.finance.yahoo.com/table.csv?s=aapl&a=6&b=21&c=2014&d=6&e=29&f=2014'
http_response=requests.get(url)
stock_reader=csv.reader(http_response.text.splitlines())
stock_data=list(stock_reader)
pprint.pprint(stock_data)
ds,open_,high,low,close,volume,adjc = stock_data[1]
print("The stock opened at {} on {}".format(open_,ds))
print("The average closing price was {0:.02f}".format(
sum(float(item[4]) for item in stock_data[1:])/len(stock_data[1:])))
为了更方便,你可以试试 csv.DictReader
:
http_response=requests.get(url)
stock_reader=csv.DictReader(http_response.text.splitlines())
stock_data=list(stock_reader)
print("The stock opened at {Open} on {Date}".format(**stock_data[0]))
print("The average closing price was {0:.02f}".format(
sum(float(item['Close']) for item in stock_data)/len(stock_data)))