在Python中将文本文件读入矩阵

时间:2018-02-04 01:05:32

标签: python numpy text-files

我在python中有文本文件变量,包含:

A 
-1 2 -3
4 5 6

B 
4 5 6
3 23 5

如何以紧凑的方式从这个文本文件中删除矩阵?我已经解决了,但这是一个丑陋而漫长的解决方案..

idx_A = read_data.find('A')
matrix = [item.split() for item in read_data[idx_A:(idx_B+1)].split('\n')[:-1]]
            A = np.array(list(map(float, matrix[1])))
            for i in range(2,len(matrix)-1): 
                A = np.vstack([A,list(map(float, matrix[i]))])

等等..

2 个答案:

答案 0 :(得分:2)

AFAIK,Python没有针对多个变量的人类可读,平面文件,序列化格式。在将来,您应该考虑使用npz格式和savez函数来保持人类的可读性。或者,如果您可以放弃人类可读性,那么请查看pickle

因此,要以您拥有的格式恢复数据,您必须进行一些手动文件读取。这就是我为第一次尝试而想出来的,我不认为这太麻烦了:

from io import StringIO
import numpy as np

stateName, stateData = range(2)

state = stateName

allData = {}

with open('data') as fp:
    for line in fp:
        #print(line.strip())
        if state == stateName:
            currentName = line.strip()
            currentData = ""
            state = stateData
        else: # stateData
            if(line.strip()): # there some data on this line
                currentData += line
            else: #no data, so process what we have
                dataAsFile = StringIO(currentData)
                allData[currentName] = np.loadtxt(dataAsFile)
                state = stateName

#Process last variable
dataAsFile = StringIO(currentData)
allData[currentName] = np.loadtxt(dataAsFile)

使用名为' data'的文件中的问题数据运行它,我明白了:

>>> allData
{'B': array([[  4.,   5.,   6.],
       [  3.,  23.,   5.]]), 'A': array([[-1.,  2., -3.],
       [ 4.,  5.,  6.]])}

答案 1 :(得分:1)

使用numpy将csv文件读入数组:

import numpy as np
csv = np.genfromtxt('file.csv')

numpy.genfromtxt documentation注意delimiter默认为None或任何空格。

解析特定格式的一种方法是使用以下可选参数:

  

skip_header :int,可选

     

文件开头要跳过的行数。

     

skip_footer :int,可选

     

文件末尾要跳过的行数。