Shaepfile 无法工作,我不断收到异常,不确定错误是什么
大家好,我正在用Python绘制地图,使用的是从ONS地理门户网站获取的英国ITL3区域的形状文件。我想在Python中实现这个功能,但遇到了一个异常错误,我会附上错误信息:
Traceback (most recent call last):
File "C:\Users\\PycharmProjects\pythonProject3\Map2.py", line 15, in <module>
sf = shp.Reader(shp_path)
File "C:\Users\AppData\Roaming\Python\Python39\site-packages\shapefile.py", line 1048, in __init__
self.load(path)
File "C:\Users\AppData\Roaming\Python\Python39\site-packages\shapefile.py", line 1193, in load
raise ShapefileException("Unable to open %s.dbf or %s.shp." % (shapeName, shapeName))
shapefile.ShapefileException: Unable to open \ITL3_JAN_2021_UK_BFE_V3.dbf or \ITL3_JAN_2021_UK_BFE_V3.shp.
我使用的代码是这个:
import numpy as np
import pandas as pd
import shapefile as shp
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid", palette="pastel", color_codes=True)
sns.mpl.rc("figure", figsize=(10,6))
#opening vector map
shp_path ="\\ITL3_JAN_2021_UK_BFE_V3.shp"
sf = shp.Reader(shp_path)
len(sf.shapes())
如果有人能帮我解决这个问题,我将非常感激,这样我就可以查看形状文件中包含的记录了。
2 个回答
0
我了解到你正在使用 pyshp
来读取 这个 特定的 shapefile(看起来你已经解压了它)。所以,ShapefileException
的意思是你当前终端的目录中缺少这两个文件(.dbf
和 .shp
):
┣━━ ITL3_JAN_2021_UK_BFE_V3.cpg
┣━━ ITL3_JAN_2021_UK_BFE_V3.dbf # >> missing
┣━━ ITL3_JAN_2021_UK_BFE_V3.prj
┣━━ ITL3_JAN_2021_UK_BFE_V3.shp # >> missing
┗━━ ITL3_JAN_2021_UK_BFE_V3.shx
或者可能这些文件是存在的,你只需要在你的 shapefile 路径中去掉 \\
:
shp_path ="\\ITL3_JAN_2021_UK_BFE_V3.shp"
shp_path = "ITL3_JAN_2021_UK_BFE_V3.shp"
为了避免这些问题,我建议你传入压缩文件的 绝对路径(顺便说一下,pyshp 可以读取压缩文件):
import shapefile as shp
# replace ... with the actual path
shp_path = ".../International_Territorial_Level_3_January_2021_UK_BFE_V3_2022.zip"
sf = shp.Reader(shp_path)
len(sf.shapes()) # 179
话说回来,如果你的主要目标是做图的话,我建议使用 geopandas :
import geopandas as gpd
import seaborn as sns
gdf = gpd.read_file(shp_path)
sns.set(style="whitegrid", palette="pastel", color_codes=True)
sns.mpl.rc("figure", figsize=(10, 6))
gdf.plot(column="BNG_E")
1
我看到你没有指定正确的文件路径,
这个错误提示是说无法打开 \ITL3_JAN_2021_UK_BFE_V3.dbf 或 \ITL3_JAN_2021_UK_BFE_V3.shp。
你可以试着把文件保存在这个路径,比如:
path = "C:\myfolder\ITL3_JAN_2021_UK_BFE_V3.shp"
或者试试这个:
path = r"C:\myfolder\path_to_your_file\ITL3_JAN_2021_UK_BFE_V3.shp"
确保你能通过把这个路径粘贴到你的Windows浏览器中来访问到你的文件位置。然后根据这个调整你的代码。
希望这能帮到你。