1
this tutorial에서 'Earthquakes'예제를 따르려고합니다. 다음과 같이 코드는 다음과 같습니다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'
내가 비슷한 질문을 인터넷 검색 및 지금까지 내가 이해, 그것은 파이썬 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 '는'data = data.split (b'\ n ') [+ 1 : -1] 행에서와 비슷한 문자열을'bytes'로 해석합니다. '문자열 'b'에 대해 \ n ". 대안으로'url.read()'에서 얻은 데이터를'decode()'할 수 있습니다. 'data = url.read(). decode ('utf-8')'(또는 인코딩이 적절한 경우). https://docs.python.org/3.6/library/stdtypes.html?highlight=decode#bytes.decode를 참조하십시오. – norok2