关于python:字典键不存在 – 但它确实存在

Dictionary key does not exist - but it does

本问题已经有最佳答案,请猛点这里访问。

我用exifread从照片中获取一些exif信息。

目前,我正在尝试获取GPS纬度和经度,我可以做到:

1
2
3
4
5
6
7
8
9
10
def main():
    images = image_paths(IMAGE_FOLDER) # folder is say"Sample Photos\"
    info = {}
    for img in images:
        _lat, _lon ="",""
        tags = exifread.process_file(open(img,'rb'))      

        for i in tags.keys():
            if i =="GPS GPSLatitude":
                print(i,":::", tags[i])

这将打印我所期望的,它们的键名和值:

GPS GPSLatitude ::: [32, 52, 66443/1250] GPS GPSLatitude ::: [32, 52,
531699/10000] GPS GPSLatitude ::: [32, 52, 531699/10000] GPS
GPSLatitude ::: [32, 52, 132789/2500] GPS GPSLatitude ::: [32, 52,
265817/5000]

但是,为了跳过这个循环,快速地获取键/值对,我正在尝试(这将取代for i ...循环)

1
_lon = tags["GPS GPSLatitude"]

但我得到一个错误:

KeyError: 'GPS GPSLatitude'

如何访问"GPS gpslateitude"(和"GPS gpslongitude"),而不通过tags的键循环?

编辑:

tags

  • 不熟悉exifread,什么是type(tags)
  • 你确定每张照片都有标签吗?您的输出将与一些具有它的输出兼容,一些不兼容。
  • @广角治疗师:这个空间似乎来自于print,它自动在参数之间打印一个空间,除非被告知要这样做。
  • 仅当特定图像具有该标记时才打印,但您正在循环处理多个图像。不是所有的图像都有这个标签,如果没有,你就不会打印。
  • @马蒂·皮耶特——该死,就是这样。我加了一个Try/Except,就修好了。很抱歉之前没听说过:(
  • @鲁德希尔德曼-哇,当我这样搜索的时候,那篇文章怎么没出现?就这样。


是否可能某些标签没有密钥'GPS GPSLatitude'

也许你可以试试

1
_lat = tags.get('GPS GPSLatitude', '')

这样,如果存在_lat将被设置为纬度值,否则将被设置为空字符串。

  • 是的,就是这样。大多数人应该有GPS,这就是为什么我不想检查,但显然不是所有人都要检查的原因。谢谢!(也谢谢你教我get()的功能,非常好)。


如果任何图像没有该标记,则需要处理该异常以防止崩溃。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
def main():
    images = image_paths(IMAGE_FOLDER) # folder is say"Sample Photos\"
    info = {}
    for img in images:
        _lat, _lon ="",""
        tags = exifread.process_file(open(img,'rb'))      

        try:
            _lon = tags["GPS GPSLongitude"]
            # _lat = tags["GPS GPSLatitude"]  # presumably you also want this
            # do something with these... perhaps add to info
        except KeyError:
            pass  # move on

  • 你有一个错别字,_lon不应该等于纬度变量,如果你只是想覆盖它们,那么它的无意义就是在每个循环中将两个变量都初始化为空。
  • 谢谢,@eagle->只是想做个例子,但很好地抓住了打字错误。