numpy loadtxt пропустить первую строку

у меня небольшая проблема, когда я пытаюсь импортировать данные из CSV-файлов с функцией loadtxt numpy. Вот пример типа файлов данных, которые у меня есть.

назовите это ' datafile1.csv':

# Comment 1
# Comment 2
x,y,z 
1,2,3
4,5,6
7,8,9
...
...
# End of File Comment

сценарий, который я думал, будет работать для этой ситуации выглядит так:

import numpy as np
FH = np.loadtxt('datafile1.csv',comments='#',delimiter=',',skiprows=1)

но, я получаю сообщение об ошибке:

ValueError: could not convert string to float: x

Это говорит мне, что kwarg 'skiprows' не пропускает заголовок, он пропускает первую строку комментариев. Я мог бы просто убедитесь, что skiprows=3, но трудность в том, что у меня очень большое количество файлов, которые не обязательно имеют одинаковое количество закомментированные строки в верхней части файла. Как я могу убедиться, что при использовании loadtxt я получаю только фактические данные в такой ситуации?

П. С. - Я тоже Баш решений.

2 ответов


пропустить строку комментария вручную, используя выражение генератора:

import numpy as np

with open('datafile1.csv') as f:
    lines = (line for line in f if not line.startswith('#'))
    FH = np.loadtxt(lines, delimiter=',', skiprows=1)

создайте свою собственную функцию фильтра, такую как:

def skipper(fname):
    with open(fname) as fin:
        no_comments = (line for line in fin if not line.lstrip().startswith('#'))
        next(no_comments, None) # skip header
        for row in no_comments:
            yield row

a = np.loadtxt(skipper('your_file'), delimiter=',')