给出以下脚本来读取纬度,经度和幅度数据:
#!/usr/bin/env python
# Read in latitudes and longitudes
eq_data = open('lat_long')
lats, lons = [], []
for index, line in enumerate(eq_data.readlines()):
if index > 0:
lats.append(float(line.split(',')[0]))
lons.append(float(line.split(',')[1]))
#Build the basemap
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
antmap = Basemap(projection='spstere', boundinglat=-20, lon_0=-60, resolution='f')
antmap.drawcoastlines(color='0.50', linewidth=0.25)
antmap.fillcontinents(color='0.95')
x,y = antmap(lons, lats)
antmap.plot(x,y, 'r^', markersize=4)
plt.show()
Run Code Online (Sandbox Code Playgroud)
尝试阅读纬度,经度和幅度时,我收到以下错误:
Traceback (most recent call last):
File "./basic_eqplot.py", line 10, in <module>
lats.append(float(line.split(',')[0]))
ValueError: invalid literal for float(): -18.381 -172.320 5.9
Run Code Online (Sandbox Code Playgroud)
输入文件类似于:
-14.990,167.460,5.6
-18.381,-172.320,5.9
-33.939,-71.868,5.9
-22.742,-63.571,5.9
-2.952,129.219,5.7
Run Code Online (Sandbox Code Playgroud)
为什么会导致打嗝的任何想法?
您的输入文件中似乎有一行或多行损坏的数据.你的追溯说明了:
ValueError: invalid literal for float(): -18.381 -172.320 5.9
Run Code Online (Sandbox Code Playgroud)
特别是发生了什么:
-18.381 -172.320 5.9从eq_data读入.split(',')在字符串上调用"-18.381 -172.320 5.9".由于字符串中没有逗号,因此该split方法返回一个包含单个元素的列表,即原始字符串.float.该字符串"-18.381 -172.320 5.9"无法解析为浮点数并且ValueError引发a.要解决此问题,请仔细检查输入数据的格式.您也可以尝试在try/except块中包含此代码段,以便为您提供有关问题特定来源的更多有用信息:
for index, line in enumerate(eq_data.readlines()):
if index > 0:
try:
lats.append(float(line.split(',')[0]))
lons.append(float(line.split(',')[1]))
except ValueError:
raise ValueError("Unable to parse input file line #%d: '%s'" % (index + 1, line))
Run Code Online (Sandbox Code Playgroud)
小智 5
可能发生的是你的输入文件有一个格式错误的行,其中一个空格用于分隔字段而不是逗号.
因此,结果line.split(',')[0]是整个输入行(在您的情况下"-18.381 -172.320 5.9").
更一般地说:对于这些类型的问题,我真的想使用Python cvs模块来解析输入文件:
import csv
with open('lat_long', 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
assert len(row) == 3
lst, lon, mag = row
...
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用像熊猫这样的工具; 但在某些情况下这可能有点矫枉过正.