Python将对象值转换为in

2024-10-03 11:13:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python已经有一段时间了,但仍然遇到一些基本问题。 我目前正在使用python中的exifread库来获取经度和纬度。我需要把DMS值转换成DD

到目前为止,我写了以下内容:

    #!/bin/python
import math
import exifread
path_name = './IMAG0658.jpg'
f = open(path_name, 'rb')

tags = exifread.process_file(f)

GPSLat = tags['GPS GPSLatitude']
print tags['GPS GPSLatitudeRef']
print GPSLat.values[0]
print GPSLat.values[1]
print GPSLat.values[2]
GPSDDLat = GPSLat.values[0] + ((GPSLat.values[1] / 60) + (GPSLat.values[2]/3600))
print GPSDDLat

但是,打印以下内容后会崩溃:

^{pr2}$

如何根据列表值而不是对象本身来计算?在


Tags: pathnameimportbintagsdmsddgps
2条回答

您的代码不完整,因为您没有提供输入文件IMAG0658.jpg。但有些事情还是可以说的,我们仍然可以回答你的问题。在

从您的print语句来看,看起来像GPSLat.values[0]和{}都是int值。但是我们看到GPSLat.values[2]看起来像一个分数,因此不是int值。从您的错误回溯中我们可以看到GPSLat.values[1]或{}实际上是一个对象实例。所以这些值中至少有一个像数值一样打印,但实际上是一个对象实例。在

问题的解决方案是获取那些在print函数中显示的、因此str函数也可以访问的显式数值,并在进一步计算之前将其转换为数值。由于GPSLat.values[2]不像int那样打印,而是像分数一样打印,因此我们可以使用fractions模块中的Fraction类型来轻松地转换为float。因此,对于每个值,我们使用str来获得看起来像数字的值,然后将其转换为实际的float值。在

所以我们可以

from fractions import Fraction

GPSDDLat = ( float(str(GPSLat.values[0])) 
           + float(str(GPSLat.values[1])) / 60
           + float(Fraction(str(GPSLat.values[2]))) / 3600
           )

但是如果没有这个文件,我就无法对代码进行真正的检查。在

GPSLat.values[x]是一个对象(一个实例,正如它在回溯中所说的)。在

为了获得学位,你需要:

def val_2_deg(value):
    return float(value.num) / float(value.den)

然后将公式改为:

^{pr2}$

相关问题 更多 >