• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

matlab导出csv文件多种方法实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

matlab导出csv文件多种方法实现

觉得有用的话,欢迎一起讨论相互学习~


  • 作为一名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);

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi中封装ADO之我重学习记录。。。发布时间:2022-07-18
下一篇:
delphiTMemoryStream和TStringStream转换发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap