我有一个纯文本文件(.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数组的整数,如下所示:
[[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)
但是结果的narray格式不正确。
[['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 ']]
有人能帮我吗? 为了避免由于末尾的文本而可能发生的错误,您可以使用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]])
(我以二进制模式打开文件以避免genfromtxt
在Python 3中存在的字节/str问题。)
一个简单的解决方案是显式忽略不需要的行:
with open(path) as infile:
lines = infile.readlines()
np.loadtxt(lines[2:-2])
del lines # if you want to immediately release the memory
这直接给出了你想要的,假设页眉和页脚总是各两行。