我是Python的新手,我正在尝试在obspy包的一个模块中执行代码。来自一个.txt文件,其中一行包含五个用逗号分隔的值(例如: 40,47.698,146.9212,等等...)我需要在obspy模块的函数中使用这些值作为变量。我会给你看代码,这样你就能更好地理解。
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;等)…。)代码运行完美,它向我展示了我想要的:
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文件中的变量时,代码显示如下:
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小说状态。
非常感谢并向你们所有人致以问候。
发布于 2020-02-13 21:05:06
多亏了西班牙社区的另一个男孩,我才解决了这个问题。我必须将变量转换为数值,因为代码将其读取为字符串。我用这个改变解决了这个问题:
a = float(columna[0])
b = float(columna[1])
c = float(columna[2])
d = float(columna[3])
e = float(columna[4])感谢所有人,我希望继续我的学习(用Python编程和用英语写作)。
https://stackoverflow.com/questions/60188976
复制相似问题