我正在尝试遵循 this tutorial 中的“地震”示例。代码如下:
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'
我用谷歌搜索了类似的问题,据我了解,它与使用 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()
最佳答案
当您尝试使用 split
时,您使用的是 ','
而不是 b','
。关键是 bytes
和 str
需要使用 encode
或 decode
显式地相互转换,否则你必须始终如一地使用其中之一。
关于python - matplotlib从url : TypeError: a bytes-like object is required,而不是 'str'读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649652/