С копией n-paste вашего образца в txt
:
In [350]: np.genfromtxt(txt.splitlines(), invalid_raise=False)
/usr/local/bin/ipython3:1: ConversionWarning: Some errors were detected !
Line #2 (got 4 columns instead of 3)
Line #3 (got 4 columns instead of 3)
....
#!/usr/bin/python3
Out[350]: array([4.01e+06, 1.40e+01, 1.50e+03])
Это прочитало первую строку без комментариев и приняло это за стандарт. Пропустив это, я могу прочитать все строки:
In [351]: np.genfromtxt(txt.splitlines(), invalid_raise=False,skip_header=4)
Out[351]:
array([[1.00000e+00, 4.32300e+00, 1.38758e+02, 1.67105e-03],
[2.00000e+00, 1.29690e+01, 1.21755e+02, 1.46629e-03],
[3.00000e+00, 2.16150e+01, 1.27700e+02, 1.53788e-03],
[4.00000e+00, 3.02610e+01, 1.31682e+02, 1.58584e-03],
[5.00000e+00, 3.89070e+01, 1.27525e+02, 1.53578e-03],
[6.00000e+00, 4.75530e+01, 1.36322e+02, 1.64172e-03],
[7.00000e+00, 5.61990e+01, 1.18014e+02, 1.42124e-03],
[8.00000e+00, 6.48450e+01, 1.25842e+02, 1.51551e-03],
[9.00000e+00, 7.34910e+01, 1.20684e+02, 1.45339e-03],
[1.00000e+01, 8.21370e+01, 1.32282e+02, 1.59306e-03],
[1.10000e+01, 9.07830e+01, 1.21567e+02, 1.46402e-03],
[1.20000e+01, 9.94290e+01, 9.78690e+01, 1.17863e-03],
[1.30000e+01, 1.08075e+02, 0.00000e+00, 0.00000e+00],
[1.40000e+01, 1.16721e+02, 0.00000e+00, 0.00000e+00]])
На самом деле в этом случае все остальные имеют требуемые 4. Если я усекаю последние 2 строки, я получаю предупреждение, но все равно читает другие строки.
Фильтрация строк перед передачей их на genfromtxt
- еще один вариант. genfromtxt
принимает любые входные данные, которые подают в него строки - файл, список строк или функцию, которая читает и фильтрует файл.