前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab导出csv文件多种方法实现

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

作者头像
演化计算与人工智能
发布2020-08-14 10:39:10
7.2K0
发布2020-08-14 10:39:10
举报

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

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

  • 作为一名python 粉丝,csv是我最喜欢的文件格式。那么 如何将matlab中的变量保存为csv?

示例

  • 有一个51*2的矩阵,我们将其列表头分别记为Obj1和Obj2,而行表头为1-51。将这个矩阵输出到csv中。
  • 数据和代码下载地址[1]

csvwrite方法

  • 挺好用的
代码语言:javascript
复制
% 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方法

  • 好用,并且能够在不覆盖原有数据的方式,在行后进行添加
代码语言:javascript
复制
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方法给予了很大的发展空间,按列进行保存。好用!
代码语言:javascript
复制
% 可以设置行名称
% 首先创建一个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 不支持元组

代码语言:javascript
复制
% 注意fprintf不支持元胞数组
title={'NO','obj1','obj2'};%这样写会报错
fprintf(fid,'%s,%s,%s\n',title(1),title(2),title(3));
% 参数3有误
  • 为此将其元组转换为矩阵试试
代码语言:javascript
复制
% 注意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)));
  • 将元组转换为矩阵真好
代码语言:javascript
复制
% 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不支持元胞数组,还有一种思路,就是使用字符串矩阵表示表头
  • 刚开始我是下面这样写的
代码语言:javascript
复制
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));
代码语言:javascript
复制
% 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);

参考资料

[1]

数据和代码下载地址: https://github.com/Asurada2015/learn_and_test_matlab/tree/master/res/save_as_csv

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrawSky 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • matlab导出csv文件多种方法实现
    • 觉得有用的话,欢迎一起讨论相互学习~
    • 示例
    • csvwrite方法
    • dlmwrite方法
    • writetable方法
    • fprintf方法
      • 踩雷
        • fprintf 不支持元组
        • fprintf字符串矩阵
        • 参考资料
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档