GOOGLE ADS

пятница, 6 мая 2022 г.

При чтении zip-файла шейп-файла из URL-адреса ошибка для начального значения не str

Используя 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 принимает строку, в то время как данные, которые вы передаете, представляют собой байты.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...