我有一个包含以下内容的纯文本文件(.txt)。
Matrix Header.
6 11
0 1 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 0 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1
0 0 0 0 1 1 1 0 0 0 0
1 1 1 0 0 1 1 1 1 1 1
1 0 0 1 1 1 1 0 1 1 0
6 rows, 11 columns
我需要获得一个numpy整数的ndarray,如下所示:
[[0 1 1 1 1 1 1 1 1 1 1]
[1 0 1 1 1 1 0 1 1 1 1]
[1 1 1 1 0 0 1 1 1 1 1]
[0 0 0 0 1 1 1 0 0 0 0]
[1 1 1 0 0 1 1 1 1 1 1]
[1 0 0 1 1 1 1 0 1 1 0]]
我尝试了以下策略
import pandas
import numpy
data = pandas.read_table(path, skiprows= 2)
data = data.values
print(data)
但是由此产生的ndarray格式不正确。
[['0 1 1 1 1 1 1 1 1 1 1 ']
['1 0 1 1 1 1 0 1 1 1 1 ']
['1 1 1 1 0 0 1 1 1 1 1 ']
['0 0 0 0 1 1 1 0 0 0 0 ']
['1 1 1 0 0 1 1 1 1 1 1 ']
['1 0 0 1 1 1 1 0 1 1 0 ']]
有人能帮助我吗?
答案 0 :(得分:1)
一个简单的解决方案是明确忽略您不需要的行:
with open(path) as infile:
lines = infile.readlines()
np.loadtxt(lines[2:-2])
del lines # if you want to immediately release the memory
这假设页眉和页脚总是两行,直接给你你想要的东西。
答案 1 :(得分:1)
为避免由于末尾的文本而可能发生的错误,您可以将numpy.genfromtxt
与max_rows
参数一起使用。例如,
In [26]: with open(filename, 'rb') as f:
...: f.readline() # skip the header
...: nrows, ncols = [int(field) for field in f.readline().split()]
...: data = np.genfromtxt(f, dtype=int, max_rows=nrows)
...:
In [27]: data
Out[27]:
array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0]])
(我以二进制模式打开文件,以避免{3}在Python 3中出现的字节/ str问题。)