Проблемы с чтением Zip of Shapefiles без загрузки памяти - PullRequest
1 голос
/ 18 марта 2019

Я пытался адаптировать процедуру чтения шейп-файлов Эндрю Гайдуса для своих нужд.Jupyter Notebook, который я использую, действует так, как будто он разделил диск моего MacBook Pro, поэтому я не могу читать или записывать на диск.У Гайдуса есть хорошая процедура, позволяющая избежать использования диска, но она написана для предыдущей версии Python.

Вот код:

    dls = "https://github.com/ItsMeLarry/Coursera_Capstone/raw/master/tl_2010_25009_tract00%202.zip"
lynntracts = ZipFile(io.BytesIO(urllib.request.urlopen(dls).read()))
print("Done")

filenames = [y for y in sorted(lynntracts.namelist()) for ending in ['dbf', 'prj', 'shp', 'shx'] if y.endswith(ending)] 
#For some reason, I get 8, instead of 4, filenames.  The first 4 start with __MACOSX. I get rid of those. The problem I
#have with the 'TypeError' occurs no matter which set of 4 files I use.
print(filenames[0], 'Example of the 4 files that I remove in the for loop')
for i in range(0,4):
     del filenames[0]
print(filenames)
dbf, prj, shp, shx = [io.StringIO(ZipFile.read(filename)) for filename in filenames]
r = shapefile.Reader(shp=shp, shx=shx, dbf=dbf)
print(r.numRecords)

Открытие с помощью io.BytesIO вылечило предыдущую проблему с байтом/ ул столкновения.Теперь посмотрите на TypeError для ZipFile.read.Я получаю ту же ошибку, если при вызове использую io.BytesIO.Вот вывод ошибки с последующей информацией об ошибке:

Готово __MACOSX / tl_2010_25009_tract00 /._ tl_2010_25009_tract00.dbf Пример 4 файлов, которые я удаляю в цикле for

['tl_2010_25009_tract_0000_tt_tf / tl9'tl_2010_25009_tract00 / tl_2010_25009_tract00.prj', 'tl_2010_25009_tract00 / tl_2010_25009_tract00.shp', 'tl_2010_25009_tract00 / tl_2010_25009_tract00.shx']

1011 * TypeError Traceback (самый последний вызов последнего) в () 12-дель-имена файлов [0] 13 печать(имена файлов) ---> 14 dbf, prj, shp, shx = [io.StringIO (ZipFile.read (имя файла)) для имени файла в именах файлов] 15 r = shapefile.Reader (shp = shp, shx = shx, dbf =dbf) 16 print (r.numRecords)

in (.0) 12 del имени файла [0] 13 print (имя файла) ---> 14 dbf, prj, shp, shx = [io.StringIO (ZipFile).read (имя файла)) для имени файла в именах файлов] 15 r = shapefile.Reader (shp = shp, shx = shx, dbf = dbf) 16 print (r.numRecords)

TypeError: read () отсутствует 1Обязательный позиционный аргумент: «имя»

Понятно, я новичокр.Я пришел с пустыми руками, пытаясь исследовать это.Куда я иду?Что мне нужно здесь понять?Спасибо

...