Вы также можете загружать шейп-файлы из любого файлового объекта Python, используя ключевые аргументы, чтобы указать любой из трех файлов.Эта функция очень мощная и позволяет загружать шейп-файлы из URL-адреса, из ZIP-файла, сериализованного объекта или, в некоторых случаях, из базы данных.
Ниже приведен пример того же
>>> myshp = open("shapefiles/blockgroups.shp", "rb")
>>> mydbf = open("shapefiles/blockgroups.dbf", "rb")
>>> r = shapefile.Reader(shp=myshp, dbf=mydbf)
Используйте open вместо read. В качестве альтернативы попробуйте следующий пример
from __future__ import print_function
import zipfile
import StringIO
import shapefile
zipshape = zipfile.ZipFile(open(r'C:\GIS\Temp\RoadsShapefileFolder.zip', 'rb'))
print(zipshape.namelist())
dbfname, _, shpname, _, shxname = zipshape.namelist()
r = shapefile.Reader(shp=StringIO.StringIO(zipshape.read(shpname)),
shx=StringIO.StringIO(zipshape.read(shxname)),
dbf=StringIO.StringIO(zipshape.read(dbfname)))
print(r.bbox)
print(r.numRecords)
Это тоже должно работать.Надеюсь, это поможет.