首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对从.txt文件获取的变量使用obspy.taup

对从.txt文件获取的变量使用obspy.taup
EN

Stack Overflow用户
提问于 2020-02-12 21:00:49
回答 1查看 84关注 0票数 0

我是Python的新手,我正在尝试在obspy包的一个模块中执行代码。来自一个.txt文件,其中一行包含五个用逗号分隔的值(例如: 40,47.698,146.9212,等等...)我需要在obspy模块的函数中使用这些值作为变量。我会给你看代码,这样你就能更好地理解。

代码语言:javascript
复制
from obspy.taup import TauPyModel
model = TauPyModel(model="iasp91")

archivo=open('Dato.txt', 'r')
for linea in archivo.readlines():
    columna = str(linea).split(',')
    print(columna[0])
    print(columna[1])
    print(columna[2])
    print(columna[3])
    print(columna[4])
archivo.close()

a=columna[0]
b=columna[1]
c=columna[2]
d=columna[3]
e=columna[4]

arrivals=model.get_pierce_points_geo(a, b, c, d, e, phase_list=('SKS',), resample=False)

arrival = arrivals[0]

print(arrival.pierce)

如果我将变量定义为数值(example:a=408;b=47.6981;c=146.9212;等)…。)代码运行完美,它向我展示了我想要的:

代码语言:javascript
复制
408
47.6981
146.9212
36.882277
-3.068689
C:\Users\peopl\Desktop\BO\env\lib\site-packages\obspy\taup\tau_branch.py:496: UserWarning: Resizing a TauP array inplace failed due to the existence of other references to the array, creating a new array. See Obspy #2280.
  warnings.warn(msg)
[ ( 323.37738085,   0.00000000e+00,   0.00000000e+00,   408.        ,  47.6981    ,  146.9212    )
 ( 323.37738085,   4.25942791e-01,   9.18383444e-05,   410.        ,  47.70292225,  146.9180712 )
 ( 323.37738085,   4.95211705e+01,   1.33680904e-02,   660.        ,  48.39912219,  146.45957792)
 ( 323.37738085,   4.30994629e+02,   3.09568047e-01,  2889.        ,  63.17117462,  131.25054174)
 ( 323.37738085,   6.19102877e+02,   7.88455257e-01,  3482.54497821,  73.50766588,   55.65029149)
 ( 323.37738085,   8.07211124e+02,   1.26734247e+00,  2889.        ,  54.05973754,    7.50927585)
 ( 323.37738085,   1.18868458e+03,   1.56354242e+00,   660.        ,  38.47340944,   -2.34102958)
 ( 323.37738085,   1.23777981e+03,   1.57681868e+00,   410.        ,  37.75869395,   -2.67200616)
 ( 323.37738085,   1.23820575e+03,   1.57691051e+00,   408.        ,  37.75374671,   -2.67427329)
 ( 323.37738085,   1.28179336e+03,   1.58536568e+00,   210.        ,  37.29809076,   -2.88171143)
 ( 323.37738085,   1.32180477e+03,   1.59207012e+00,    35.        ,  36.93652754,   -3.04441779)
 ( 323.37738085,   1.32587993e+03,   1.59253065e+00,    20.        ,  36.91168346,   -3.05553737)
 ( 323.37738085,   1.33192110e+03,   1.59307573e+00,     0.        ,  36.882277  ,   -3.068689  )]

然而,当我使用.txt文件中的变量时,代码显示如下:

代码语言:javascript
复制
408
47.6981
146.9212
36.882277
-3.068689
Traceback (most recent call last):
  File "pierce.py", line 20, in <module>
    arrivals=model.get_pierce_points_geo(a, b, c, d, e, phase_list=('SKS',), resample=False)
  File "C:\Users\peopl\Desktop\BO\env\lib\site-packages\obspy\taup\tau.py", line 784, in get_pierce_points_geo
    distance_in_deg = calc_dist(source_latitude_in_deg,
  File "C:\Users\peopl\Desktop\BO\env\lib\site-packages\obspy\taup\taup_geo.py", line 53, in calc_dist
    return calc_dist_azi(source_latitude_in_deg, source_longitude_in_deg,
  File "C:\Users\peopl\Desktop\BO\env\lib\site-packages\obspy\taup\taup_geo.py", line 86, in calc_dist_azi
    g = ellipsoid.Inverse(source_latitude_in_deg,
  File "C:\Users\peopl\Desktop\BO\env\lib\site-packages\geographiclib\geodesic.py", line 1035, in Inverse
    a12, s12, salp1,calp1, salp2,calp2, m12, M12, M21, S12 = self._GenInverse(
  File "C:\Users\peopl\Desktop\BO\env\lib\site-packages\geographiclib\geodesic.py", line 712, in _GenInverse
    lon12, lon12s = Math.AngDiff(lon1, lon2)
  File "C:\Users\peopl\Desktop\BO\env\lib\site-packages\geographiclib\geomath.py", line 156, in AngDiff
    d, t = Math.sum(Math.AngNormalize(-x), Math.AngNormalize(y))
TypeError: bad operand type for unary -: 'str'

前五行的数值与.txt文件中的数值相同,但似乎显示'str‘有问题。如果你能帮我解决这个问题,我会很高兴的。对不起,我的Arcaic英语和我的Python小说状态。

非常感谢并向你们所有人致以问候。

EN

回答 1

Stack Overflow用户

发布于 2020-02-13 21:05:06

多亏了西班牙社区的另一个男孩,我才解决了这个问题。我必须将变量转换为数值,因为代码将其读取为字符串。我用这个改变解决了这个问题:

代码语言:javascript
复制
a = float(columna[0])
b = float(columna[1])
c = float(columna[2])
d = float(columna[3])
e = float(columna[4])

感谢所有人,我希望继续我的学习(用Python编程和用英语写作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60188976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档