【发布时间】:2019-04-07 00:39:21
【问题描述】:
我正在尝试加载位于一组地理文件的 zipfile 中的 shapefile。我尝试了几种方法并且一直在学习,但一无所获。以下代码应该适用于 Python 3.5。
我尝试了 Andrew Gaidus 示例方法,并意识到它适用于以前的 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'。
示例不执行“打开”操作,但我想知道 geopandas 是否告诉我应该这样做。
【问题讨论】:
-
那是因为响应是 404 Not Found(检查
r.status_code)。您确定您的网址正确吗? -
@t.m.adam 你是对的。我忘记了我需要使用“原始”目录进行下载,而不是“blob”。当然,这只是将我引向下一个谜团。为此编辑了问题陈述。谢谢,
-
我认为
shp只是文件名,所以gpd.read_file()找不到文件,因为它是在tmp/中提取的。您应该使用绝对或相对文件路径,例如tmp/tl_2010_25009_tract00.shp。 -
t.m.adam 好的,所以将“tmp/”附加到所有文件名。我会看看会发生什么。我想知道如果我不将它解压缩到 tmp 文件夹会发生什么。我会明白的。 MACOSX 和 Jupyter notebook 在文件管理方面存在争议。磁盘的行为就好像它已经被 Jupyter 和操作系统在不同的一侧进行了分区一样。
-
我对 Jupyter 或 MAC 没有太多经验,所以对此我无能为力。一般最好使用文件的绝对路径,这样即使不在脚本执行的同一路径下也能定位到。
标签: python-3.x python-requests jupyter-notebook zipfile geopandas