将mat文件中的数据按要求保存到txt文档中(批处理)
之前有个老朋友,让帮忙将一个mat中的数据重新保存到txt中,由于数据比较多需要用到批处理,之前弄过很多次,但每次一到要用的时候总是忘记怎么写了,现在记录一下,免得后面老是需要上网搜。这里先说一个比较有意思的matlab函数--dlmwrite,用这个函数将数据导入到txt文件中,其实用save也是可以的,但是这个函数的功能更强大,而且可以按不同的要求导入数据。因为将数据导入到txt中时,需要用逗号分隔,其主要函数格式如下:
使用默认的分隔符(')将矩阵M写入ASCII格式的文件中。在目标文件filname中,数据是从第一行的第一列开始写的。输入的filename是使用单引号括起来的字符串。
2.dlmwrite(filename, M, 'D')
将矩阵M写入一个ASCII格式的文件中,使用分隔符D来分割矩阵的元素。在目标文件filname中,数据是从第一行的第一列开始写的。逗号'是默认的分隔符,使用\t来产生制表符分割的文件。
还有不少带其他参数的格式,大家可以根据自己需要进行百度。
一 需求分析
首先,加载后是一个元胞数组results,里面有一个1*1的结构体,结构体里面放了数据的一些信息,需要导出的是res这个double矩阵里面的数据,如下所示:


保存之后的数据用逗号分隔。
二 单个mat数据保存到txt中
如果只是保存一个mat中的数据还是很好做的,用刚才提到的dlmwrite函数就可以很轻松的做到,代码如下:
clear,clc;
a = load('OPE_Basketball.mat');
b = a.results;
dlmwrite('res2.txt',b{1,1}.res,'delimiter',',','newline','pc');
保存之后的结果如下:

三 批处理导入
用于保存的txt文档的名字应该跟原mat的名字对应起来,比如basketball.mat导入到txt中后,该txt的名字应该是basketball.txt。因此需要用到dir函数获取文件夹下的mat文件的名字,代码如下:
namelist = dir('.\*.mat');
len = length(namelist);
for i = 1:len %循环读取当前文件夹下的.mat文件
file_name{i}=namelist(i).name;
a= load(file_name{i});
b = a.results; %取出其中的数据
wname = file_name{i}; % 取出mat文件的名字,用于给txt文件命名。
wname = ['.\',wname,'.txt']; % 用来保存数据的txt文档的名字,只能用[],不能直接相加
dlmwrite(wname,b{1,1}.res,'delimiter',',','newline','pc'); %把数据输出到txt文件中
end
其结果是:


数据没什么问题,但是txt文件的名字有问题,主要是读取的时候连后缀那些也取出来了,由于前后的字符数都是一样的,所以将mat文件名取出来的时候可以直接截取中间部分。网上有不少matlab截取字符的函数,这里的话,直接用下标截取是最方便的。代码如下:
namelist = dir('.\*.mat');
len = length(namelist);
for i = 1:len %循环读取当前文件夹下的.mat文件
file_name{i}=namelist(i).name;
a= load(file_name{i});
b = a.results; %取出其中的数据
wname = file_name{i}(5:end-4); % 取出mat文件的名字,用于给txt文件命名。 取字符串的第五个到倒数第四个子串
wname = ['.\',wname,'.txt']; % 用来保存数据的txt文档的名字,只能用[],不能直接相加
dlmwrite(wname,b{1,1}.res,'delimiter',',','newline','pc'); %把数据输出到txt文件中
end
现在基本上就没什么问题了,如下:


如果需要将这些txt文档放在指定文件下,只需要修改一下路径就可以了,比如:
namelist = dir('.\*.mat');
len = length(namelist);
for i = 1:len %循环读取当前文件夹下的.mat文件
file_name{i}=namelist(i).name;
a= load(file_name{i});
b = a.results; %取出其中的数据
wname = file_name{i}(5:end-4); % 取出mat文件的名字,用于给txt文件命名。 取字符串的第五个到倒数第四个子串
wname = ['.\li\',wname,'.txt']; % 用来保存数据的txt文档的名字,只能用[],不能直接相加
dlmwrite(wname,b{1,1}.res,'delimiter',',','newline','pc'); %把数据输出到txt文件中
end
结果如下:

将mat文件中的数据按要求保存到txt文档中(批处理)的更多相关文章
- C++ code: 将程序的输出,保存到txt文档中,且每35个数,自动换行
// write the predicted score into txt files ofstream file("/home/wangxiao/Downloads/caffe ...
- JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...
- Java读取接口中的数据,并保存到txt文件中!
//创建读取接口中数据的方法 public static String read() { URL url = null; BufferedReader reader = null; HttpURLCo ...
- 获取选中行中的数据提取并且保存到txt
function getchcount(query: TADOQuery): Integer;var i:integer;begin i:=0; with Query do begin Query.F ...
- 用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理
用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理 我测了一组数据存到txt文件中,是个WIFI信号强度文档,里面有我们需要得到的数据,有没用的数据,想用matla ...
- 一个简易的Python爬虫,将爬取到的数据写入txt文档中
代码如下: import requests import re import os #url url = "http://wiki.akbfun48.com/index.php?title= ...
- 用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)
前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中.数据格式如下图所示 观察上图可知,存在文本文档中的数据符合一定的格式,通过 ...
- 向post请求中写入数据,最终保存在了HttpWebRequest.Params中
一.向post请求中写入数据,最终保存在了HttpWebRequest.Params中: 1)如果存入的是IDictionary类型的字符串变量,如:“username=administrator”, ...
- 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
下面是自己编写的 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中 (以防忘记) 原创哟 import java.io.BufferedReader;import java.io.Buffe ...
随机推荐
- 移植seetafaceengine-master、opencv到ARM板
0.前言 在要移植opecv和SeetaFaceEngine-master到ARM板子上运行的所有步骤之前,有几点需要注意的: 查看板子运行的Kernel版本 交叉编译工具链的gcc版本,关键就是工具 ...
- ES6中对数组的扩展
hello,大家好,我又来了. 前面讲了字符串和数值的扩展,今天要讲的是:数组的扩展.不知道大家能否跟得上这个节奏,你们在阅读中对讲解有存在疑惑,记得留言提出来,要真正地理解,否则白白 ...
- 解决linux(ubuntu18)下无法挂载ntfs磁盘,并读写挂载硬盘
首先需要有ntfs-3g,没有的话sudo apt-get install ntfs-3g 挂载硬盘: chen@ilaptop:/$ sudo mount -o rw,remount /dev/sd ...
- 详解封装源码包成RPM包
源码编译安装是最常用安装软件方式,可是面对工作量巨大时候就需要我们的RPM包上场了,统一的模块,一键安装.在面对一定数量的服务器上,RPM就可以为我们节省大量的时间. RPM可以在网上下载,但是当我们 ...
- java中使用Semaphore构建阻塞对象池
java中使用Semaphore构建阻塞对象池 Semaphore是java 5中引入的概念,叫做计数信号量.主要用来控制同时访问某个特定资源的访问数量或者执行某个操作的数量. Semaphore中定 ...
- Vant Weapp小程序蹲坑之使用card组件显示价格
问题 在基于mpvue+Vant Weapp组件库实战过程中,问题越来越多.网络上所谓的"坑"总结,仅仅不过是其开发中所遭所遇之"坑"而已--估计后面的&quo ...
- 如何设计scalable 的系统 (转载)
Design a Scalable System Design a system that scales to millions of users (AWS based) Step 1: Outlin ...
- js中的filter
filter是常说的增删改查中的'查',当对一个数组进行筛选时,经常会使用indexOf 和es6中的includes()方法.filter是es5中的一种迭代方法,其定义为:对数组中的每一项运行给定 ...
- 基于HTML Canvas实现“指纹识别”技术
https://browserleaks.com/canvas 说明所谓指纹识别是指为每个设备标识唯一标识符(以下简称UUID).诸如移动原生的APP都可以通过调用相关设备API来获取相应的UUID. ...
- Nakamori Akina
听过中森明菜的歌以后,一直想写点什么.恰好前段时间看过她的一个访谈https://b23.tv/av13810011,节目里已经39岁左右的她看着已经有些衰老,但是那份属于她的天真却保持的很好. 节目 ...