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

Python exifread解析难题:提取照片坐标时exif模块导入及坐标处理异常

照片EXIF坐标提取问题解决方案

问题1:ModuleNotFoundError: No module named 'exif' 报错解决

  • 首先排查Python解释器环境不匹配问题:运行脚本时执行import sys; print(sys.executable),确认输出路径是否为你当前使用的Anaconda环境目录
  • 若路径匹配,先激活对应Anaconda环境,再使用环境内置的pip重装exif模块:
    1. 执行conda activate 你的环境名激活目标环境
    2. 执行pip install --force-reinstall exif强制重装模块,消除版本兼容、路径缓存问题
  • 若路径不匹配,在Anaconda Navigator的对应环境下启动IDE/终端运行脚本,不要使用全局Python环境执行

问题2:exifread模块IfdTag对象转度分秒数组解决

exifread返回的IfdTag对象内置values属性,存储了度分秒的有理数结构,直接提取转换即可,示例代码如下:

import exifread

# 读取照片EXIF数据
with open("目标照片路径.jpg", "rb") as f:
    exif_tags = exifread.process_file(f, details=False)

# 提取GPS标签
gps_lat = exif_tags.get("GPS GPSLatitude")
gps_lon = exif_tags.get("GPS GPSLongitude")

# 转换为度分秒数值数组
if gps_lat and gps_lon:
    # 遍历values中的Rational对象,转为float类型
    lat_dms = [float(x.num)/float(x.den) for x in gps_lat.values]
    lon_dms = [float(x.num)/float(x.den) for x in gps_lon.values]
    # 输出示例:[39.0, 54.0, 26.1234] 对应北纬39度54分26.1234秒
    print("纬度度分秒数组:", lat_dms)
    print("经度度分秒数组:", lon_dms)

# 如需转十进制度用于地图可视化,可直接计算:
# lat_decimal = lat_dms[0] + lat_dms[1]/60 + lat_dms[2]/3600
# lon_decimal = lon_dms[0] + lon_dms[1]/60 + lon_dms[2]/3600

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:07