我有非常简单的.tsv数据。前两行指示度量和单位,其余各行仅是直接数据:
Energy IncidentFlux
eV ?
4.0 2.349749705280954e-09
3.99 3.4927474683858684e-09
3.98 5.1237361678671736e-09
3.97 3.737724206016752e-09
3.96 3.556492149406742e-09
... ...
data_tsv = []
for l in f:
#print(l.strip().split())
data_tsv.append(l.strip().split())
data_tsv = np.array(data_tsv)
energy_eV_tsv = []
eqe_tsv = []
我试图创建一个循环遍历文件的循环,仅提取数字,以便可以将其附加到新数组中以进行单独的计算,但是我不知道如何制定一个从字符串中区分数字的循环。
我试图查看是否将字符串转换为浮点数的错误是跳过循环的好方法,但是浮点数与数组不兼容...
我也尝试过使用我在网上找到的NaN东西,但是它表示我没有正确使用该工具。
for i in range(len(data_tsv)):
if np.isnan(data_tsv[i]) == False:
continue
a = data_tsv[i]
energy_eV_tsv.append(a[0])
eqe_tsv.append(a[1])
目标是列出列表:
energy_eV_tsv
eqe_tsv
填充各自的数据:energy_eV是data_tsv的第一列,eqe是data_tsv的第二列,而新列表/数组中没有任何字符串。
我不想执行具有预设范围的循环
for i in range(2,len(data_tsv):
...
因为有时数据没有标题,并且会删除两行数据
答案 0 :(得分:0)
除了将字符串转换为浮点数外,我们可以尝试一下。如果成功转换,则可以将它们附加到数组,否则继续下一行。 这将检查所有行,因此不会跳过前两行
energy_eV_tsv = []
eqe_tsv = []
with open("data.tsv", "r") as tsvdata:
line = tsvdata.readline()
while line != "": # Check if we have reached end of file.
col1 = line.split()[0]
col2 = line.split()[1]
try:
col1Val = float(col1)
col2Val = float(col2)
# Only if both conditions ran without an error
# will we add the data to our array
energy_eV_tsv.append(col1Val)
eqe_tsv.append(col2Val)
except ValueError:
print("Detected Strings")
line = tsvdata.readline()
print(energy_eV_tsv)
print(eqe_tsv)