1
我试图从this tutorial开始关注“地震”示例。代码如下:matplotlib从url中读取数据:TypeError:需要类似字节的对象,而不是'str'
import urllib
from mpl_toolkits.basemap import Basemap
# Significant earthquakes in the last 30 days
url = urllib.request.urlopen("https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_month.csv")
# Reading and storage of data
data = url.read()
data = data.split(b'\n')[+1:-1]
E = np.zeros(len(data), dtype=[('position', float, 2),
('magnitude', float, 1)])
for i in range(len(data)):
row = data[i].split(',')
E['position'][i] = float(row[2]),float(row[1])
E['magnitude'][i] = float(row[4])
我得到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-66-eed77a8fb64a> in <module>()
16
17 for i in range(len(data)):
---> 18 row = data[i].split(',')
19 E['position'][i] = float(row[2]),float(row[1])
20 E['magnitude'][i] = float(row[4])
TypeError: a bytes-like object is required, not 'str'
我GOOGLE了类似的问题而据我了解,它与使用Python 3 +,而不是2.7做,但我无法弄清楚如何调整代码才能正常工作。对不起,如果问题是愚蠢的,我不明白我需要做什么。
我试着用以下但无济于事:
if sys.version_info[0] == 3:
from urllib.request import urlopen
else:
from urllib import urlopen
with urlopen(url) as url:
data = url.read()
非常感谢你,它现在的作品。我很不熟悉这一切,所以请原谅。是否使用'b',''将该逗号转换为字节?有没有其他的方法来实现(即从url读取数据时)? –
准确地说:字符串前面的'b'装饰字符串以解释一个'bytes',类似于你在行data = data.split(b'\ n')[+ 1:-1] '为字符串'b'\ n''。或者,你可以'decode()'从'url.read()'得到的数据,例如'data = url.read()。decode('utf-8')'(或者whaterver编码是合适的)。另请参阅https://docs.python.org/3.6/library/stdtypes.html?highlight=decode#bytes.decode。 – norok2