Python3でNo module named ‘urllib2’エラーが出たら

Python3でModuleNotFoundError: No module named 'urllib2'のようなエラーが出た場合の解決方法。urllib2はPython2用のモジュールで、3はurllib.requesturllib.errorに分かれていると、解決策が載っているこのサイトに書いてある。以下のコードを例に修正を試みてみる。

コード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# First let's import some necessities
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

%matplotlib inline
import urllib2 # for downloading the dataset from the web.
import numpy as np
from matplotlib import pyplot
from StringIO import StringIO
from caffe2.python import core, utils, workspace
from caffe2.proto import caffe2_pb2

f = urllib2.urlopen('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')
raw_data = f.read()
print('Raw data looks like this:')
print(raw_data[:100] + '...')

import urllib2from urllib.request import urlopenに、from StringIO import StringIOimport ioに書きえ、f = urllib2.urlopenf = urlopenに書き換えれば、とりあえずimport errorは修正される。しかし、コードを実行すると以下のエラーが出る。

     16 raw_data = f.read()
     17 print('Raw data looks like this:')
---> 18 print(raw_data[:100] + '...')

TypeError: can't concat str to bytes

このサイトによると、'...'の前にbを付ければいいらしい。b'...'に書き換えてコードを実行したら無事成功した。

Raw data looks like this:
b'5.1,3.5,1.4,0.2,Iris-setosa\n4.9,3.0,1.4,0.2,Iris-setosa\n4.7,3.2,1.3,0.2,Iris-setosa\n4.6,3.1,1.5,0.2,...'

このサイトによると、b’は、python3に特有で、python2ではb’は付かないらしい。このb’を取り除くには、下記のようにコードを修正する必要がある。

1
2
3
raw_data = (f.read()).decode("utf-8")
print('Raw data looks like this:')
print (raw_data[:100] + '...')

こうすることで以下のようにチュートリアルと同じoutputになる。

Raw data looks like this:
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,...

Pythonによるdeep learning programming(深層学習プログラミング)はネット上にチュートリアルがゴロゴロ転がりまくっているのでかなり有り難い。

スポンサーリンク