Мой нынешний профессор использует Python 2.7 для примеров в классе, но другие профессора, с которыми я буду проводить занятия в будущем, предположили, что я использую Python 3.5. Я пытаюсь преобразовать примеры моего нынешнего профессора с 2,7 до 3,5. Сейчас у меня проблема с пакетом urllib2, который я понимаю, был разделен на Python 3.Как я могу обновить этот код, используя urllib2 для Python3?
Исходный код в блокноте IPython выглядит следующим образом:
import csv
import urllib2
data_url = 'http://archive.ics.uci.edu/ml/machine-learning- databases/adult/adult.data'
response = urllib2.urlopen(data_url)
myreader = csv.reader(response)
for i in range(5):
row = next(myreader)
print ','.join(row)
Что я превращал в :
import csv
import urllib.request
data_url = 'http://archive.ics.uci.edu/ml/machine-learning- databases/adult/adult.data'
response = urllib.request.urlopen(data_url)
myreader = csv.reader(response)
for i in range(5):
row = next(myreader)
print(','.join(row))
Но это оставляет меня с ошибкой:
Error Traceback (most recent call last)
<ipython-input-19-20da479e256f> in <module>()
7 myreader = csv.reader(response)
8 for i in range(5):
----> 9 row = next(myreader)
10 print(','.join(row))
Error: iterator should return strings, not bytes (did you open the file in text mode?)
Я неуверенный, как исходить отсюда. Есть идеи?
ли вы рассмотрите возможность использования пакета ['запросов'] (http://docs.python-requests.org/en/master/)? – MYGz
Вам нужно преобразовать 'bytes', возвращаемые' urlopen' в 'str'. '.decode()' делает это. Взгляните на: http://stackoverflow.com/questions/6224052/what-is-the-difference-between-a-string-and-a-byte-string. –
Возможный дубликат [Читать .csv-файл из URL-адреса в Python 3.x - \ _csv.Error: iterator должен возвращать строки, а не байты (вы открыли файл в текстовом режиме?)] (Http://stackoverflow.com/ Вопросы/18897029/read-csv-file-from-url-in-python-3-x-csv-error-iterator-should-return-str) – theodor