Matlab函数fscanf()
似乎非常强大。在python(或numpy)中是否有相同的相同内容?
具体来说,我想从文件中读取一个矩阵,但我不想遍历每一行来读取矩阵。 这种东西(从matlab读取2D 1000x1000矩阵):
matrix = fscanf(fopen('input.txt'),'%d',[1000,1000]);
答案 0 :(得分:5)
Python没有内置的fscanf
函数。最接近的方法是逐行读取文件并使用正则表达式。
Numpy(类似Matlab的Python库)有一个允许从内容中读取文件并构造数组的函数:numpy.fromfile
(或者,如其他答案所示) ,numpy.loadtxt
在这种情况下可能更合适。)
答案 1 :(得分:3)
我很确定没有,但迭代并不太难。这样就可以了:
matrix = []
for i in open('input.txt'):
matrix.append( map(int, i.split()) )
如果你需要更复杂的东西(即不仅仅是用单个字符分隔的整数),正则表达式可能就是这样。
答案 2 :(得分:1)
我认为Wookai的回答是不正确的。我认为numpy.loadtxt就是您所寻找的。 p>
答案 3 :(得分:0)
你看过numpy吗? - http://www.scipy.org/Download
顺便说一下,fscanf在内部以列顺序存储数据 - 所以我认为不会有任何效率提升。 http://www.mathworks.com/help/techdoc/ref/fscanf.html
答案 4 :(得分:0)
我认为这样做的pythonic方法是打开文件并使用列表推导将数据读入list
list
个。
(为了清晰起见,我使用字符串中的数据,并使用StringIO
从文件中读取数据。)
>>> from cStringIO import StringIO
>>> data_file="1 2 3 4 5 6\n7 8 9 10 11 12\n13 14 15 16 17 18\n19 20 21 22 23 24\n"
>>> reader=StringIO(data_file)
>>> array=[map(int, reader.readline().split()) for i in xrange(4)]
>>> array
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24]]
如前所述,numpy有一种更直接的方法。