Ich versuche, von Matlab in Python zu kommen, also, beginnend klein, ich bin beim Lesen und Schreiben von Daten. Ich wurde von Matlabs exzellenter, in sich abgeschlossener Dokumentation verwöhnt und habe Schwierigkeiten, den besten Ansatz in Python zu finden, um Matlab in erster Linie mit fopen, textscan, fgetl, regexp und fprintf zu erreichen. Ich habe einige Befürworter numpy.loadtxt (& savetxt) gesehen, während andere einen Ansatz "mit offenem (...) als f: für Linie ..." befürworten - letzteres könnte sein, was ich in diesem Fall des Lesens von a Spalte von String-Headern, gefolgt von einer Matrix von Floating-Nummern, beide von unbekannter Größe. Ich habe Matlab-Code zusammen probieren, dass:Lesen und Schreiben von Daten in Python (Matlab-Benutzer)
- Liest den Pfad und den Namen einer Datei zu lesen, wie in einer Textdatei angegeben, und kombiniert sie zu einem einzigen String
- Bestimmt die Anzahl der Header in der Datei von 1, und die Größe der Matrix von durch Kommas getrennte schwimmende Daten unterhalb der Header
- Liest die Header und die Matrix in der Datei von 1, getrennt in zwei Variablen
- schreiben die Header und Matrix zu einer anderen Datei
Einige dieser Schritte, zum Beispiel 2-3, könnten in der Praxis kombiniert werden, aber sie hier zu trennen hilft mir bei einigen unterschiedlichen Aufgaben. Dies ist vielleicht eher eine "bitte teilen Sie mit mir die besten Programmierpraktiken in Python für diese generische Aufgabe" anstatt einer sehr spezifischen Frage, aber ich denke, dass dies auch für andere neue Python-Benutzer nützlich wäre. Danke für jeden spezifischen Python-Code und/oder Referenzen.
%%
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
Sie auch Ihr 'matlab' Code – davedwards
Dank einschließen möchten könnten den [Matlab] (https://stackoverflow.com/tags/matlab/info) Tag für die Benutzer vertraut mit dem Lesen, aber ich habe ursprünglich und ein Moderator entfernte die Matlab-Flagge. – Aaron
Es gibt eine Code-Review-Stack-Tausch-Site für diese Art von Frage. – TheBlackCat