Чтение текстовых файлов и пропуск строк, если не целочисленные значения - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь прочитать значения из очень длинного текстового файла (2552 строки), вводящего различные столбцы файла в разные массивы. Я хочу позже использовать эти значения для построения графика, используя данные из файла. Однако не все строки в столбце являются целыми числами (например, «<1.6» вместо «1.6»), и некоторые строки являются пустыми. </p>

Есть ли способ пропустить эти строки, которые являются полностью пустыми или держать нецелые значения без пропуска значения в моем массиве? (и, следовательно, выясните, как долго мои массивы должны быть в первую очередь для удаления лишних нулей в конце)

Вот мой код:

# 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'

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Используйте isinstance (), чтобы убедиться, что тип является целым:

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])
0 голосов
/ 12 марта 2020

Я обнаружил, что isinstance хорош для различения типов.

Вы можете вставить логи c, чтобы определить, действительно ли значение является целым числом до его приведения. Например:

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