You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用exifread直接获取GPS纬度键报错,该键实际存在的解决方法

解决exifread中直接访问GPS标签的KeyError问题

这个问题的核心原因其实很容易被忽略:exifread返回的tags字典,其键并不是普通的字符串,而是exifread.classes.ExifTag类的实例对象。

当你遍历tags打印键的时候,Python会自动调用这些ExifTag对象的__str__()方法,输出友好的字符串格式(比如你看到的"GPS GPSLatitude"),但实际字典的键是对象,不是字符串——这就是为什么直接用字符串"GPS GPSLatitude"索引会抛出KeyError的原因。

解决方法

这里有两种简单可靠的方式可以直接访问你需要的GPS标签:

方法1:创建字符串键映射字典

把原tags字典转换成以字符串为键的新字典,之后就可以用你熟悉的字符串直接索引了:

import exifread

# 读取照片Exif信息
with open("your_photo.jpg", "rb") as f:
    tags = exifread.process_file(f)

# 转换为字符串键的字典
str_tags = {str(key): value for key, value in tags.items()}

# 直接访问GPS纬度和经度
gps_latitude = str_tags["GPS GPSLatitude"]
gps_longitude = str_tags["GPS GPSLongitude"]

print(gps_latitude, gps_longitude)

方法2:直接通过标签的标识访问

如果你不想额外创建字典,也可以直接使用ExifTag的匹配逻辑——exifread允许你通过(组名, 标签名)的元组来访问对应的值,比如GPS标签的组名是"GPS",标签名是"GPSLatitude"和"GPSLongitude":

import exifread

with open("your_photo.jpg", "rb") as f:
    tags = exifread.process_file(f)

# 用元组键直接访问
gps_latitude = tags[("GPS", "GPSLatitude")]
gps_longitude = tags[("GPS", "GPSLongitude")]

print(gps_latitude, gps_longitude)

额外提示

如果你不确定标签的具体名称,可以先打印所有字符串键来确认:

for key in tags:
    print(str(key))

这样就能确保你用的字符串和标签的实际字符串表示完全一致,避免因拼写、大小写或空格问题导致的错误。

内容的提问来源于stack exchange,提问作者BruceWayne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:07:26