2013-04-17 3 views
3

Я пытаюсь загрузить несколько векторов и матриц (для numpy), которые хранятся в одном текстовом файле. файл выглядит следующим образом:умный способ чтения нескольких переменных из текстового файла в python

%VectorA 
1 2 3 4 
%MatrixA 
1 2 3 
4 5 6 
%VectorB 
3 4 5 6 7 

Идеальным решением было бы иметь объект словаря, как:

{'VectorB': [3, 4, 5, 6, 7], 'VectorA': [1, 2, 3, 4], 'MatrixA':[[1, 2, 3],[4, 5, 6]]} 

Порядок переменных можно считать фиксированной. Таким образом, список массивов numpy в порядке появления в текстовом файле также будет в порядке.

+0

Можете ли вы до сих пор изменить формат текстовых файлов или это то, что вы должны жить? – jsalonen

+0

он гибкий, пока кто-то знает, какие данные есть. но значения должны быть разделены пробелами. – thengineer

+1

Зачем вам нужно разделять пространство значений? Я имею в виду некоторые особые причины, по которым вы не можете использовать 'numpy.load' и' numpy.save'? – jsalonen

ответ

5
from StringIO import StringIO 
mytext='''%VectorA 
1 2 3 4 
%MatrixA 
1 2 3 
4 5 6 
%VectorB 
3 4 5 6 7''' 

myfile=StringIO(mytext) 
mydict={} 
for x in myfile.readlines(): 
    if x.startswith('%'): 
     mydict.setdefault(x.strip('%').strip(),[]) 
     lastkey=x.strip('%').strip() 
    else: 
     mydict[lastkey].append([int(x1) for x1 in x.split(' ')]) 

выше дает mydict как:

{'MatrixA': [[1, 2, 3], [4, 5, 6]], 
'VectorA': [[1, 2, 3, 4]], 
'VectorB': [[3, 4, 5, 6, 7]]}