我最近在给python3重写一些代码,并在寻找一个干净的python解决方案来解码urllib.request.urlopen传递给csv.reader在
我想到了以下几点:
import urllib.request
def fetch(symbol='IBM'):
kwargs = { 'symbol': symbol,
'start_month': '01',
'start_day': '01',
'start_year': '2002',
'end_month': '12',
'end_day': '31',
'end_year': '2012',
}
urlstring = 'http://ichart.finance.yahoo.com/table.csv?s={symbol}&a={start_month}&b={start_day}&c={start_year}&d={end_month}&e={end_day}&f={end_year}&g=d&ignore=.csv'.format(**kwargs)
data = [row for row in csv.reader(map(bytes.decode, urllib.request.urlopen(urlstring), ('iso-8859-1' for i in iter(lambda:0,1))))]
return data
我想知道有没有更好的解决办法?实际上,url返回的是一个csv文件,在python2.x中,我只能使用urllib2并将urllib2.urlopen()的返回值传递给csv.reader()但是,在Python3.x中,我们现在返回字节,所以我将响应映射到字节.解码然后把它传给csv.reader. 但我很好奇,有没有更好的方法可以做到这一点,或者也许我在寻找最佳解决方案时遗漏了一些东西?在
在这种情况下,返回的对象需要在传递给另一个要迭代的函数之前进行解码,这种情况下,正确的python方法是什么?在
编辑: 谢谢伊格纳西奥!在
看看你给我的链接,我得到了以下解决方案:
^{pr2}$看起来干净多了!在
通常我们get a reader然后从那里经过。在
我建议使用^{} :
相关问题 更多 >
编程相关推荐