читать структурированный массив из файла ascii - PullRequest
0 голосов
/ 21 октября 2019

У меня есть текстовый файл ASCII (в заданном формате, который я не могу изменить) с содержимым

previous data...
#
# some comment
2 a -0.9989532219119496
1 b 1.8002219998623799
1 c 0.2681232137509927
# 
some other things...

, и я хотел бы прочитать этот файл в массив с пользовательским типом d ( "структурированный массив" ). Все это работает, когда файл является двоичным (удалите sep="\n" ниже), но не работает, когда файл является ASCII:

import numpy as np
import string

# Create some fake data
N = 3
dtype = np.dtype([("a", "i4"), ("b", "S8"), ("c", "f8")])
a = np.zeros(N, dtype)
a["a"] = np.random.randint(0, 3, N)
a["b"] = np.array([x for x in string.ascii_lowercase[:N]])
a["c"] = np.random.normal(size=(N,))

print(a)

a.tofile("test.dat", sep="\n")
b = np.fromfile("test.dat", dtype=dtype, sep="\n")

print(b)
ValueError: Unable to read character files of that array type

Любые подсказки здесь?

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

1 Ответ

1 голос
/ 23 октября 2019
In [286]: txt = """previous data... 
     ...: # 
     ...: # some comment 
     ...: 2 a -0.9989532219119496 
     ...: 1 b 1.8002219998623799 
     ...: 1 c 0.2681232137509927 
     ...: #  
     ...: some other things...""".splitlines()  

Использование параметров, как отмечено в моем комментарии:

In [289]: np.genfromtxt(txt, skip_header=1, max_rows=3, dtype=None, encoding=None)                                                                    
Out[289]: 
array([(2, 'a', -0.99895322), (1, 'b',  1.800222  ),
       (1, 'c',  0.26812321)],
      dtype=[('f0', '<i8'), ('f1', '<U1'), ('f2', '<f8')])
In [290]: _.shape                                                               
Out[290]: (3,)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...