如果不是整数值,则读取文本文件并跳过行

问题描述 投票:0回答:1

我正在尝试从一个非常长的文本文件(2552行)中读取值,将文件的各个列输入不同的数组。我想稍后使用这些值来使用文件中的数据绘制图形。但是,并非一列中的所有行都是整数(例如,“ <1.6”而不是“ 1.6”),并且某些行为空白。

是否有一种方法可以跳过这些完全空白的行或保留非整数值而又不跳过数组中的值? (并因此找出我的数组需要排多长时间才能最后删除多余的零)]

到目前为止是我的代码:

# Light curve plot


jul_day = np.zeros(2551)
mag = np.zeros(2551)
mag_err = np.zeros(2551)


file = open("total_data.txt")
lines = file.readlines()[1:]


i = 0

for line in lines:
    fields = line.split(",")
    jul_day[i] = float(fields[0])
    mag[i] = float(fields[1])
    mag_err[i] = float(fields[2])


    i = i + 1

这里是错误消息的示例:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-d091536c6666> in <module>()
     18     fields = line.split(",")
     19     jul_day[i] = float(fields[0])
---> 20     mag[i] = float(fields[1])
     21     #mag_err[i] = float(fields[2])
     22 

ValueError: could not convert string to float: '<1.6'
python list matplotlib graph text-files
1个回答
0
投票

我发现isinstance适合识别类型。

您可以在插入值之前插入逻辑以确定值是否确实是整数。例如:

if isinstance(fields[1], int):
    mag[i] = float(fields[1])

0
投票

使用isinstance()确保类型为int:

for line in lines:
    fields = line.split(",")
    jul_day[i] = float(fields[0])
    if isinstance(fields[1],int):
        mag[i] = float(fields[1])
    if isinstance(fields[2],int):
        mag_err[i] = float(fields[2])
© www.soinside.com 2019 - 2024. All rights reserved.