簡體   English   中英

Matlab用Eof編寫python fread

[英]matlab to python fread with eof

我在使用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

這是我的“ like-for-like” 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的代碼編寫方式?

不知道您的某些值來自哪里,但是如果您想捕獲異常,請執行以下操作:

        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')

這是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中的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM