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'
が、私は同様の質問を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からデータを読み込むとき)を実現する別の方法はありますか? –
正確には、 'data = data.split(b '\ n')[+ 1:-1]の行のように、文字列の前に' b'が文字列を ' 'の文字列' 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