Requests.get (zipfile) получает «BadZipFile: файл не является zip-файлом» - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь загрузить шейп-файл, который находится в zipfile набора гео-файлов. Я испробовал несколько подходов и изучал, и никуда не деться. Следующий код должен работать на Python 3.5.

Я попробовал примерный подход Эндрю Гайдуса и понял, что это для предыдущей версии Python. Подход Oldja взят из документов Python 3.x и должен работать. Но проблемы продолжают возникать.

dls = "https://github.com/ItsMeLarry/Coursera_Capstone/raw/master/tl_2010_25 009_tract00.zip"
print('Downloading shapefile...')
r = requests.get(dls)
z = zipfile.ZipFile(io.BytesIO(r.content))
print("Done")
z.extractall(path='tmp/') # extract to folder
filenames = [y for y in sorted(z.namelist()) for ending in ['dbf', 
'prj', 'shp', 'shx'] if y.endswith(ending)] 
print(filenames)
dbf, prj, shp, shx = [filename for filename in filenames]
print(shp)
lynnmap = gpd.read_file(shp)

Я получаю 4 имени файла, как и должен. Теперь при lynnmap = gpd ... я получаю ошибку:

OSError: нет такого файла или каталога: 'tl_2010_25009_tract00.shp'.

Примеры не выполняют операцию "открытия", но мне интересно, говорит ли геопанда, что я должен.

1 Ответ

1 голос
/ 09 апреля 2019

Если цель состоит в том, чтобы просто прочитать файл из GitHub и создать из него GeoDataFrame (и вам не обязательно загружать и разархивировать его локально, для более быстрого повторного чтения), вы можете прочитать файл непосредственно изURL-адрес GitHub с использованием функции geopandas.read_file:

In [4]: df = geopandas.read_file("https://github.com/ItsMeLarry/Coursera_Capstone/raw/master/tl_2010_25009_tract00.zip") 

In [5]: df.head()                                                      
Out[5]: 
  STATEFP00 COUNTYFP00  ...    INTPTLON00                                           geometry
0        25        009  ...  -070.9744124  POLYGON ((-70.977153 42.452525, -70.9773139999...
1        25        009  ...  -070.9789107  POLYGON ((-70.986276 42.46005299999999, -70.98...
2        25        009  ...  -070.9853846  POLYGON ((-70.988809 42.460175, -70.9889149999...
3        25        009  ...  -070.9611517  POLYGON ((-70.95187 42.473647, -70.950974 42.4...
4        25        009  ...  -070.9925246  (POLYGON ((-71.000474 42.507547, -70.999544 42...

[5 rows x 13 columns]

geopandas.read_file принимает URL-адрес, а также может автоматически обрабатывать zip-файл различных файлов шейп-файлов и возвращает GeoDataFrame.

...