使用python3解码urllib中的字节,有更好的方法吗?

2024-10-06 07:14:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近在给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}$

看起来干净多了!在


Tags: csvrequesturllib解决方案symbol解码yearstart