Shaepfile 无法工作,我不断收到异常,不确定错误是什么

2 投票
2 回答
41 浏览
提问于 2025-04-14 18:07

大家好,我正在用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

话说回来,如果你的主要目标是做图的话,我建议使用

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浏览器中来访问到你的文件位置。然后根据这个调整你的代码。

希望这能帮到你。

撰写回答