使用eof进行matlab to python fread

时间:2014-08-14 07:17:04

标签: python matlab nested eof fread

我在python中实现以下MATLAB代码时遇到了一些麻烦。

for i = 1:N
    if (feof(fid) ~= 1)
        for j = 1:K
            if (feof(fid) ~= 1)
                    tmp = fread(fid, 1, 'float');
                    data.(fldnames{j,1}).Samples(i) = tmp;
            else
                disp('Error: End of file reached');
            end
        end
    else
        disp('Error: End of file reached');
    end

这是我喜欢的类似的' python尝试,

sampleList = numpy.zeros((N, K))
for i in range(1, N) :
    for j in range(1, K) : 
        if EOF == 0 :
            try : 
                samples = array.array("f")
                samples.fromfile(f, 1)
                sampleList[i, j] = samples[0]
            except : 
                EOF = 1
return sampleList 

但是我在捕获两个EOF时遇到了麻烦。是否有更简单,更pythonic的方式编写此代码?

2 个答案:

答案 0 :(得分:1)

不确定您的某些值来自哪里,但是如果您想要捕获异常:

        for j in range(1, K) :
            try :
                samples = array.array("f")
                samples.fromfile(f, 1)
                sampleList[i, j] = samples[0]
            except EOFError: # catch eof exception
                print ('Error: End of file reached')

答案 1 :(得分:1)

这是matlab代码在python中的作用:

def read_data(filename, fieldnames, n):
    data = numpy.fromfile(filename, count=n * len(fieldnames))
    assert len(data) == n * len(fieldnames)
    return dict((key, data[idx::len(fieldnames)]) for idx, key in enumerate(fieldnames))

我假设字段名称的数量为K,而fid是文件filename的文件句柄,n是每个字段的项目数N。你得到的是一个带字段名的字典,相当于matlab中的一个结构。