如何在不添加字符串的情况下将数组中的数字存储到列表中

时间:2019-06-13 04:14:36

标签: python-3.x

我有非常简单的.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):
...

因为有时数据没有标题,并且会删除两行数据

1 个答案:

答案 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)