文字版:从Python到Matlab

Text edition: from Python to Matlab

我有一个 .txt 文件,如下所示:

rawdata/d-0197.bmp 1 329 210 50 51
rawdata/c-0044.bmp 1 215 287 59 48
rawdata/e-0114.bmp 1 298 244 46 45
rawdata/102.bmp 1 243 126 163 143

我需要进行如下改造:

-在"rawdata"之前添加整个路径,即“/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/”。 -在“.bmp”后加一个逗号

-删除第一个数字(即 1)。

-将其他四个数字放入方括号[].

看起来像:

/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/rawdata/d-0197.bmp, [329 210 50 51]
/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/rawdata/c-0044.bmp, [215 287 59 48]
/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/rawdata/e-0114.bmp, [298 244 46 45]
/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/rawdata/102.bmp, [243 126 163 143]

我已经做到了,首先在简单的文本编辑器中将 "rawdata/" 替换为空,然后用 python:

file=open('data.txt')
fout=open('data2.txt','w')

for line in file:
    line=line.rstrip()
    pieces=line.split('.bmp')
    pieces2=pieces[1].split()
    fout.write('/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/rawdata/'+pieces[0]+'.bmp, '+'['+pieces2[1]+' '+pieces2[2]+' '+pieces2[3]+' '+pieces2[4]+']'+'\n')
fout.close()

但是这个文件是要在Matlab中使用的,所以如果有一个自动过程就更好了。我怎样才能在 Matlab 中做同样的事情?

谢谢

给你:

infid  = fopen('data.txt', 'r');
outfid = fopen('data2.txt', 'w');

dirStr = '/home/camroom/Dropbox/Internship/MyCascades/Cascade1/training/positive/';

while ~feof(infid)
    inline = fgetl(infid);
    outline = [dirStr, regexprep(inline,' 1 (\d* \d* \d* \d*)',', []')];
    fprintf(outfid, '%s\n', outline);
end

fclose(infid);
fclose(outfid);

我们所做的是逐行读取输入文件中的代码,然后使用正则表达式对行进行更改,然后将其写出到输出文件。可能有更好的方法来应用正则表达式,但那是相当快的。