Используя Python 3.5, следующий пример для чтения zip-файла шейп-файла из URL-адреса и обновления для P3.5. Код ниже. Я просмотрел другие случаи и попытался добавить.decode('utf-8'), но это не помогает.
dls = "https://github.com/ItsMeLarry/Coursera_Capstone/raw/master/tl_2010_25009_tract00%202.zip"
print('Downloading shapefile...')
lynntracts = ZipFile(io.StringIO(urllib.request.urlopen(dls).read()))
print("Done")
Код ошибки: TypeError: initial_value должно быть str или None, а не bytes.
Если я вставлю.decode('utf-8'), например:
lynntracts = ZipFile(io.StringIO(urllib.request.urlopen(dls).read().decode('utf-8')))
Я получаю следующее сообщение: UnicodeDecodeError: кодек utf-8 не может декодировать байт 0xa4 в позиции 57: недопустимый начальный байт
Помещение decode() вне вызова io.StringIO не влияет на исходную проблему. Я потерялся. Что я могу попробовать или что мне нужно изучить? Спасибо.
Кроме того, я пытаюсь реализовать процедуру, которая не создает файл на диске, временный или иной, потому что отношения между Jupyter и Macos запрещают доступ к файлам на диске. Это еще одна проблема, которую еще никто не смог решить.
Решение проблемы
import urllib.request
import io
from zipfile import ZipFile
dls = "https://github.com/ItsMeLarry/Coursera_Capstone/raw/master/tl_2010_25009_tract00%202.zip"
print('Downloading shapefile...')
lynntracts = ZipFile(io.BytesIO(urllib.request.urlopen(dls).read())) -----> Edited Line
print("Done")
Вместо этого используйте BytesIO.
StringIO принимает строку, в то время как данные, которые вы передаете, представляют собой байты.
Комментариев нет:
Отправить комментарий