matlab導出csv文件多種方法實現


matlab導出csv文件多種方法實現

覺得有用的話,歡迎一起討論相互學習~


我的微博我的github我的B站

  • 作為一名python 粉絲,csv是我最喜歡的文件格式。那么 如何將matlab中的變量保存為csv?

示例

  • 有一個51*2的矩陣,我們將其列表頭分別記為Obj1和Obj2,而行表頭為1-51。將這個矩陣輸出到csv中。
  • 數據和代碼下載地址

csvwrite方法

  • 挺好用的
% Write a comma-separated value file.
csvwrite(FILENAME,M);% writes matrix M into FILENAME as comma-separated values.
csvwrite(FILENAME,M,R,C);%writes matrix M starting at offset row R, and column C in the file.

R,C分別表示寫入的行數R和列數C,並且左上角被認為是(0,0)
csvwrite('1.csv',data)

  • 如果1.csv不存在會建立一個這樣的文件
    在這里插入圖片描述
    csvwrite('1.csv',data,1,1)
    在這里插入圖片描述

dlmwrite方法

  • 好用,並且能夠在不覆蓋原有數據的方式,在行后進行添加
dlmwrite('test.csv',data(1,:),'delimiter',',');
dlmwrite('test.csv',data(2,:),'delimiter',',','-append');
dlmwrite('test.csv',data(3,:),'delimiter',',','-append','roffset',2,'coffset',2);
  • 分別表示
    • 將第一行加到test.csv中,並且以逗號為分隔符
    • 將第二行加到test.csv中,並且從行后添加
    • 將第三行加到test.csv中,並且以相對於已有數據偏移的方式
      在這里插入圖片描述

writetable方法

  • writetable方法給予了很大的發展空間,按列進行保存。好用!
% 可以設置行名稱
% 首先創建一個1-n的列向量,具體為行向量的轉置
BD1=1:51;
BD2=BD1.';

% 列名稱
title={'NO','obj1','obj2'};

%生成表格,按列生成
% VariableNames 參數用於設置列頭
result_table=table(BD2,data(:,1),data(:,2),'VariableNames',title)

% 保存數據
writetable(result_table, '2.csv');

在這里插入圖片描述
在這里插入圖片描述

fprintf方法

  • fprintf函數不僅可以向csv文件中輸入數據,可以向各種文件中輸入數據,是最萬能的方法!也是靈活程度最高的方法。

踩雷

fprintf 不支持元組

% 注意fprintf不支持元胞數組
title={'NO','obj1','obj2'};%這樣寫會報錯
fprintf(fid,'%s,%s,%s\n',title(1),title(2),title(3));
% 參數3有誤
  • 為此將其元組轉換為矩陣試試
% 注意fprintf不支持元胞數組
title={'NO','obj1','obj2'};%這樣寫會報錯
% fprintf(fid,'%s,%s,%s\n',title(1),title(2),title(3));
fprintf(fid,'%s,%s,%s\n',cell2mat(title(1)),cell2mat(title(2)),cell2mat(title(3)));
  • 將元組轉換為矩陣真好
% Create a csv file
fid=fopen('test2.csv','a');
BD1=1:size(data,1);% size(x,1)表示行數,size(x,2)表示列數
if fid<0
	errordlg('File creation failed','Error');
end

% 注意fprintf不支持元胞數組
title={'NO','obj1','obj2'};
% fprintf(fid,'%s,%s,%s\n',title(1),title(2),title(3)); % 這樣寫會保錯
fprintf(fid,'%s,%s,%s\n',cell2mat(title(1)),cell2mat(title(2)),cell2mat(title(3)));
% 一共有51行
for i=1:size(data,1)
	fprintf(fid,'%d,%d,%d\n',BD1(i),data(i,1),data(i,2));
end
fclose(fid);

在這里插入圖片描述

fprintf字符串矩陣

  • 對於注意fprintf不支持元胞數組,還有一種思路,就是使用字符串矩陣表示表頭
  • 剛開始我是下面這樣寫的
title=['NO','obj1','obj2'];
fprintf(fid,'%s,%s,%s\n',title(1),title(2),title(3));

在這里插入圖片描述

  • 可以看到這種方式把title當做整個字符串,而title(1),title(2),title(3)其實是前三個字母
    在這里插入圖片描述
    因此以下才是正確的處理方式
  • 更改fprint中的索引
    title=['NO','obj1','obj2']; fprintf(fid,'%s,%s,%s\n',title(1:2),title(3:6),title(7:10));
% Create a csv file
fid=fopen('test2.csv','a');
BD1=1:size(data,1);% size(x,1)表示行數,size(x,2)表示列數
if fid<0
	errordlg('File creation failed','Error');
end

% 注意fprintf不支持元胞數組
title=['NO','obj1','obj2'];
fprintf(fid,'%s,%s,%s\n',title(1:2),title(3:6),title(7:10));
% 一共有51行
for i=1:size(data,1)
	fprintf(fid,'%d,%d,%d\n',BD1(i),data(i,1),data(i,2));
end
fclose(fid);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM