我在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]))])
等等..
答案 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,可选
文件末尾要跳过的行数。