Python exifread解析难题:提取照片坐标时exif模块导入及坐标处理异常
照片EXIF坐标提取问题解决方案
问题1:ModuleNotFoundError: No module named 'exif' 报错解决
- 首先排查Python解释器环境不匹配问题:运行脚本时执行
import sys; print(sys.executable),确认输出路径是否为你当前使用的Anaconda环境目录 - 若路径匹配,先激活对应Anaconda环境,再使用环境内置的pip重装exif模块:
- 执行
conda activate 你的环境名激活目标环境 - 执行
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
相关产品推荐
相关产品推荐

