#python #text-files #numpy-ndarray
#python #текстовые файлы #numpy-ndarray
Вопрос:
Интересно, какой правильный синтаксис для чтения следующего test.txt
файла, который содержит следующие значения:
(p.s. test.txt имеет тип numpy.ndarray)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.51 0.47 0.45
0.42 0.42 0.4 0.385 0.375 0.41 0.415 0.375 0.355 0.36 0.41 0.4
0.39 0.38 0.375 0.375 0.375 0.38 0.39 0.395 0.385 0.38 0.375 0.375
0.37 0.365 0.36 0.355 0.35 0.35 0.345 0.345 0.35 0.36 0.355 0.355
0.35 0.35 0.355 0.355 0.35 0.35 0.35 0.345 0.34 0.335 0.325 0.325
0.325 0.33 0.345 0.325 0.32 0.315 0.315 0.315 0.31 0.31 0.31 0.305
0.305 0.3 0.3 0.29 0.29 0.3 0.295 0.29 0.29 0.29 0.29 0.29]
Я попытался прочитать файл, используя следующий код:
data_test = np.genfromtxt('test.txt')
Но я получаю сообщение об ошибке:
ValueError: Some errors were detected !
Line #43 (got 8 columns instead of 12)
Любая помощь в чтении такого рода данных, разделенных пробелом / столбцами, была бы очень признательна!
Комментарии:
1. Я думаю, что реальный ответ — исправить то, что его написало! Это должен быть 1-мерный массив или 2?
2. @tdelaney это должен быть одномерный массив!
Ответ №1:
используйте numpy.fromstring
with open('test.txt') as file:
data = file.read()
data = data.replace('n', '')
arr = np.fromstring(data[1:-1], sep=' ', dtype=np.float32)
Ответ №2:
Поскольку файл можно рассматривать как набор чисел с плавающей запятой, встроенных в десятичный мусор, регулярное выражение может их извлечь. Просто найдите все подстроки, состоящие из десятичных знаков и точки.
>>> import numpy as np
>>> import re
>>> with open('foo.txt') as fileobj:
... arr = np.array([float(val) for val in re.findall(r"[d.] ",
... fileobj.read(), flags=re.MULTILINE)])
...
>>> arr
array([0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.51 , 0.47 , 0.45 , 0.42 , 0.42 , 0.4 ,
0.385, 0.375, 0.41 , 0.415, 0.375, 0.355, 0.36 , 0.41 , 0.4 ,
0.39 , 0.38 , 0.375, 0.375, 0.375, 0.38 , 0.39 , 0.395, 0.385,
0.38 , 0.375, 0.375, 0.37 , 0.365, 0.36 , 0.355, 0.35 , 0.35 ,
0.345, 0.345, 0.35 , 0.36 , 0.355, 0.355, 0.35 , 0.35 , 0.355,
0.355, 0.35 , 0.35 , 0.35 , 0.345, 0.34 , 0.335, 0.325, 0.325,
0.325, 0.33 , 0.345, 0.325, 0.32 , 0.315, 0.315, 0.315, 0.31 ,
0.31 , 0.31 , 0.305, 0.305, 0.3 , 0.3 , 0.29 , 0.29 , 0.3 ,
0.295, 0.29 , 0.29 , 0.29 , 0.29 , 0.29 ])