我正在尝试从Matlab中学习Python,所以,从小的方面开始,我在研究读写数据。我被Matlab优秀的自包含文档给宠坏了,我很难在Python中找到最好的方法,因为在Matlab中主要是通过fopen、textscan、fgetl、regexp和fprintf实现的。我见过一些律师numpy.loadtxt文件(&savetxt)而其他人则主张使用“with open(…)as f:for line…”方法——在这种情况下,我可能需要使用后者来读取一列字符串头,后面跟着一个大小未知的浮点数矩阵。我把Matlab的示例代码放在一起:读取要读取的文件的路径和名称,如文本文件中所述,并将它们组合成单个字符串
从1开始确定文件中的标头数,以及标头下方逗号分隔的浮动数据矩阵的大小
从1读取文件中的头和矩阵,并将其分隔为两个变量
将标题和矩阵写入另一个文件
其中的一些步骤,例如2-3,可以在实践中结合起来,但在这里将它们分开将有助于我完成一些不同的任务。这可能更像是一个“请与我分享这个通用任务的Python最佳编码实践”,而不是一个非常具体的问题,但我希望这对其他新的Python用户也有用。感谢您提供任何特定的Python代码和/或引用。在%%
function ReadWrite()
tic
f=readPaths();
[t,n]=pullSize(f);
[hdr,d]=readData(f,t,n);
writeData(hdr,d);
toc
end
%%
function f=readPaths
fid=fopen('Paths.txt','r');
f=textscan(fid,'%s%s','delimiter','\t','headerlines',1);
fclose(fid);
f=char(fullfile(f{1},f{2}));
end
%%
function [t,n]=pullSize(f)
n=0;
fid=fopen(f,'r');
l=fgetl(fid);
h=isempty(regexp(l,',','once')); % headers are not comma delimited
while h
n=n+1;
l=fgetl(fid);
h=isempty(regexp(l,',','once'));
end
fclose(fid);
t=length(regexp(l,','))+1; % file is comma delimited
end
%%
function [hdr,d]=readData(f,t,n)
fid=fopen(f,'r');
hdr=textscan(fid,'%s',n);
d=textscan(fid,repmat('%f',1,t),'delimiter',',');
fclose(fid);
d=[d{:}];
hdr=[hdr{:}];
end
%%
function writeData(hdr,d)
fid=fopen('DataTest.csv','w');
for i=1:length(hdr)
fprintf(fid,'%s\n',hdr{i});
end
fprintf(fid,[repmat('%.4f,',1,size(d,2)-1),'%.4f\n'],d');
fclose(fid);
end