数据的读取和保存-MATLAB

1 序言

在进行数据处理时,经常需要写代码对保存在文件中的数据进行读取→处理→保存的操作,流程图如下:

笔者每次在进行上述操作时,都需要百度如何“选中目标文件”以及如何“将处理好的数据保存到目标文件中”,对这一块的知识点的掌握不够系统化。为了以后减少百度的次数,故对选中目标文件和保存到目标文件这两个步骤进行了梳理。

2 选中目标文件&数据读取

选中目标文件和数据读取是连在一起的,它们合在一起的意思是读取存放在目标文件里目标位置的数据。数据读取没有太多可讲的,选择目标文件后,只要已知数据存放在文件里的位置以及类型即可读取对应的数据。

选中目标文件需要已知目标文件存放的路径(下文简称文件路径)和目标文件的名称(文件名称),一般会有如下4个场景:

  1. 文件路径未知,文件名未知;
  2. 文件路径未知,文件名已知;
  3. 文件路径已知,文件名未知;
  4. 文件路径已知,文件名已知。

下面对上述四个场景的实现方法进行详细介绍。

2.1 文件路径未知,文件名未知

这种场景的实现方法是直接采用弹框的形式,当程序运行后在弹框界面人为打开文件路径,然后在文件路径下选中目标文件。关键函数为uigetfile,用法如下:

[file,path,indx] = uigetfile(filter)

输出参数意义如下:
file—返回的文件名;
path—返回的文件路径;
indx—返回的在对话框中选择的筛选器的索引。

输入参数意义如下:
filter—指定文件扩展名,根据该扩展名筛选对话框中显示的文件。

实现“文件路径未知,文件名未知”的代码如下:

clear
close all
clc
%--------存放的路径未知,文件名未知
[name,path,index] =  uigetfile('*') %选择目标文件,*表示可以选择所有格式的文件
data = csvread(fullfile(path,name)); %读取目标文件中的数据

运行效果如下:

选中目标文件'data.csv',然后点击打开即可读取目标文件中的数据。

2.2 文件路径未知,文件名已知;

这种场景的实现方法是直接采用弹框的形式,当程序运行后在弹框界面人为选中目标文件存放的路径。关键函数为uigetdir,用法如下:

selpath = uigetdir(path)

输入参数的意义:

path为初始路径,当path为空时,弹框打开的是当前文件路径;

输出参数的意义:

selpath为选择的路径。

实现“文件路径未知,文件名已知”的代码如下:

clear
close all
clc
%--------存放的路径未知,文件名已知
path = uigetdir()  %选择文件要存放的文件夹路径
name = 'data.csv'; %文件名
data = csvread(fullfile(path,name)); %读取数据

运行效果如下:

选中目标文件存放的路径'my_test',然后点击打开即可读取到目标文件中的数据。

2.3 文件路径已知,文件名未知

这种场景和“文件路径未知,文件名未知”相似,只需要弹框打开已知的文件路径,然后人为选中目标文件即可,关键函数也是uigetfile。

实现代码如下:

close all
clc
%--------文件路径已知,文件名未知
path = ''/Users/Desktop/matlab_code/folder_test/my_test'; %存放目标文件的路径
name =  uigetfile('*','',path); %从文件路径下的所有文件选择目标文件
data = csvread(fullfile(path,name)); %读取数据

运行效果和场景“文件路径未知,文件名未知”相似,只是这个直接弹框出来的就是文件路径,如下:

选中目标文件'data.csv',然后点击打开即可读取目标文件中的数据。

2.4 文件路径已知,文件名已知

这种场景实现比较简单,直接将文件路径和文件名写死即可。

clear
close all
clc
%--------存放的路径已知,文件名已知
path = '/Users/Desktop/matlab_code/folder_test/my_test'; %存放目标文件的路径
name = 'my_test.csv'; %文件名
data = csvread(fullfile(path,name)); %读取数据

3 保存到目标文件 

待数据处理完成后,需要将数据保存下来,一般会有两种场景:

① 将处理好的数据保存到原来的目标文件中,覆盖原始数据;

② 新建一个文件,将处理好的数据保存到新的文件中,原始目标文件不变。

场景①的实现代码如下:

%------将修改好的数据保存在原始文件里面
system('tskill excel'); %关闭所有打开的Excel文件
csvwrite(fullfile(path,name),data);%保存到原始文件里面

其中data为修改好的数据。由于读取时打开可目标文件,需要先关闭Excel文件,再写入到原始目标文件里,否则会报错。

场景②的实现代码如下:

%-------将修改好的数据保存到新的文件夹里
path_new = fullfile(path,'new'); %新生成的数据包存放路径
    if ~exist(path_new)
       mkdir(path_new); %不存在文件名为new的文件夹,则新建一个
    end
csvwrite(fullfile(path_new,name),data);

其中data为修改好的数据。先在文件路径下新建一个名为‘new'的文件夹,再将数据保存到新建的文件夹里。

4 批量读取和保存

批量读取和保存的关键点是获取到所有目标文件的文件名,然后通过一个循环进行批量操作。关键函数是dir,用法如下:

dir()函数的调用方式有三种,分别为:
1、dir(’.’) 列出当前目录下所有子文件夹和文件;
2、dir(‘E:\Matlab’) 列出指定目录下所有子文件夹和文件;
3、dir(E:\Matlab,’*.csv’) 列出指定目录下后缀为.csv的文件。

批量操作的实现代码如下:

clear
close all
clc
path = uigetdir();  %选择文件存放的文件夹路径
excel_files = dir(fullfile(path,'*.csv')); %获取所有后缀是.csv的文件名,如果是’*‘则是获取所有格式的文件名
folder_nums = size(excel_files,1);% 文件夹里csv文件数
for i=1:folder_nums     %获取所有文件夹名
    excel_file_names{i} = excel_files(i,1).name;
end

for i = 1:folder_nums
    excel_file_names{i} %循环处理每个目标文件
end

5 案例

5.1 一个目标文件的读取和保存

读取一个文件路径已知,文件名已知的.csv里的数据,将数据的第一行和第二列改为200,然后将修改后的数据保存到原始的.csv文件里,同时在已知的文件路径下新建一个名'new’的文件夹,将修改后的数据也保存到新建的文件夹下,保存的文件名和原始文件名一样。

上述要求实现代码如下:

clear
close all
clc
%--------存放的路径未知,文件名已知
path = '/Users/Desktop/matlab_code/folder_test/my_test'; %存放目标文件的路径
name =  'data.csv';
data = csvread(fullfile(path,name)); %读取数据
data(2,2) = 200; %数据操作,将第2行第2列的数改为200

%------将修改好的数据保存在原始文件里面
system('tskill excel'); %关闭所有打开的Excel文件
csvwrite(fullfile(path,name),data);%保存到原始文件里面

%-------将修改好的数据保存到新的文件夹里
path_new = fullfile(path,'new'); %新生成的数据包存放路径
    if ~exist(path_new)
       mkdir(path_new); %不存在文件名为new的文件夹,则新建一个
    end
csvwrite(fullfile(path_new,name),data);
'done'

运行前:

 

运行后:

 

5.2 多个目标文件的批量读取和保存

读取多个文件路径已知,文件名未知的.csv里的数据,将数据的第一行和第二列改为200,然后将修改后的数据保存到原始的.csv文件里,同时在已知的文件路径下新建一个名'new’的文件夹,将修改后的数据也保存到新建的文件夹下,保存的文件名和原始文件名一样。

实现代码如下:

clear
close all
clc
path = '/Users/Desktop/matlab_code/folder_test/my_test';  %选择文件存放的文件夹路径
excel_files = dir(fullfile(path,'*.csv')); %获取所有后缀是.csv的文件名
folder_nums = size(excel_files,1);% 文件夹里csv文件数
for i=1:folder_nums     %获取所有文件夹名
    excel_file_names{i} = excel_files(i,1).name;
end

for i = 1:folder_nums
    target_path = fullfile(path,excel_file_names{i})
    data = csvread(target_path); %读取数据
    data(2,2) = 300; %数据操作,将第2行第2列的数改为100

    %------将修改好的数据保存在原始文件里面
    csvwrite(target_path ,data);%保存到原始文件里面
    
    %-------将修改好的数据保存到新的文件夹里
    path_new = fullfile(path,'new'); %新生成的数据包存放路径
    if ~exist(path_new)
       mkdir(path_new); %不存在文件名为new的文件夹,则新建一个
    end
    csvwrite(target_path,data);
end

运行前:

运行后:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/122982.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试学习day3

文章目录 靶机:DancingTask 1Task 2Task 3Task 4Task 5Task 6Task 7Task 8 靶机:RedeemerTask 1Task 2Task 3Task 4Task 5Task 6Task 7Task 8Task 9Task 10Task 11 靶机:AppointmentTask 1Task 2Task 3Task 4Task 5Task 6Task 7Task 8Task 9T…

AI:62-基于深度学习的人体CT影像肺癌的识别与分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

java--String

1.String创建对象封装字符串数据的方式 ①方式一:java程序中的所有字符串文字(例如"abc")都为此类的对象 ②方式二:调用String类的构造器初始化字符串对象。 2.String提供的操作字符串数据的常用方法

[Vue warn]: Missing required prop: “action“

控制台显示错误信息 vue.runtime.esm.js:4605 [Vue warn]: Missing required prop: "action" found in ---> <ElUpload> at packages/upload/src/index.vue <ElTableRow> <ElTableBody> <ElTable> at pack…

maven中的install 和 clean命令,以及compile、、package、test等操作介绍

maven中的install命令 主要就是谁要被其他模块依赖就install谁 Maven工具可以进行clean、compile、install、package、test等操作&#xff0c;但是这些操作有什么用呢&#xff0c;以下面的p2p-exterface为例说明一下&#xff0c;pwp-exterface工程目录如下&#xff1a; com…

缓存-基础理论和Guava Cache介绍

缓存-基础理论和Guava Cache介绍 缓存基础理论 缓存的容量和扩容 缓存初始容量、最大容量&#xff0c;扩容阈值以及相应的扩容实现。 缓存分类 本地缓存&#xff1a;运行于本进程中的缓存&#xff0c; 如Java的 concurrentHashMap, Ehcache&#xff0c;Guava Cache。 分布式缓…

12 tcp协议详解

1、tcp的本性 tcp是一个悲观者&#xff0c;生下来就不信任网络&#xff0c;任务会发生丢包等&#xff0c;所以要从算法层面来保证可靠性。 2、TCP 包头格式 tcp的包头格式比UDP要复杂的多。 1.源端口号和目标端口号是不可少的&#xff0c;这一点和 UDP 是一样的。如果没有…

星岛专栏|从Web3发展看金融与科技的融合之道

11月起&#xff0c;欧科云链与香港主流媒体星岛集团开设Web3.0安全技术专栏&#xff0c;该专栏主要面向香港从业者、交易机构、监管机构输出专业性的安全合规建议&#xff0c;旨在促进香港Web3.0行业向安全与合规发展。 出品&#xff5c;欧科云链研究院 自2016年首届香港金融…

轻松与任何 SQL 数据库集成:Directus 助你无代码开发 | 开源日报 No.69

Ebazhanov/linkedin-skill-assessments-quizzes Stars: 26.5k License: AGPL-3.0 这个项目是一个 LinkedIn 技能评估答案的存储库。它提供了各种领域和主题的问题和答案&#xff0c;以帮助用户更好地学习新概念并准备相关考试。该项目具有以下核心优势&#xff1a; 提供多语…

计算机毕业设计 基于SpringBoot的养老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

作为一名软件测试工程师,需要具备哪些能力?

我是如何走上测试之路的 我是统招本&#xff0c;专业是计算机信息系统和信息管理&#xff0c;大四在一家事业单位&#xff08;就不说名字了&#xff09;实习做Android开发的&#xff0c;等我快毕业的时候&#xff0c;单位明确告诉我不会转正。当然了&#xff0c;我是很清楚的&…

(五)Spring源码解析:ApplicationContext解析

一、概述 1.1> 整体概览 在前面的内容中&#xff0c;我们针对BeanFactory进行了深度的分析。那么&#xff0c;下面我们将针对BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与BeanFactory的功能相似&#xff0c;都是用于向IOC中加载Bean的。…

Python tkinter用iconphoto方法修改窗口标题的图片

修改Python Tkinter窗口的标题图片&#xff0c;可以使用PhotoImage、iconphoto方法。这个方法允许你设置窗口的图标。 运行结果 代码示例如下&#xff1a; import tkinter as tkroot Tk()# 加载图片&#xff0c;记住一定是要PNG图片 icon tk.PhotoImage(filephoto\\图片.pn…

为什么HTTP用得很好的,开始普及HTTPS呢?

显而易见&#xff0c;现在的HTTP早已不安全&#xff0c;当我们在浏览各个网站时会发现HTTP前面都会显示不安全&#xff0c;因为HTTP是明文传输&#xff0c;一旦电脑被植入了木马&#xff0c;木马程序就会主动周期性发消息给Internet的控制终端&#xff0c;这样NAT小洞会一直敞开…

科技创意赋能乡村文旅振兴

近日&#xff0c;由北京大学创意产业研究中心联合中国国际科技促进会新基建专委会共同主办的“科技创意赋能乡村振兴研讨会”在京举行&#xff0c;与会专家学者围绕“和美乡村共同富裕智慧文旅”主题进行深入探讨。北京大学创意产业研究中心副主任吕艺、国家文化和旅游公共服务…

Pytorch R-CNN目标检测-汽车car

概述 目标检测(Object Detection)就是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,通俗点说就是给定一张图片要精确的定位到物体所在位置,并完成对物体类别的识别。其准确性和实时性是整个系统的一项重要能力。 R-CNN的全称是Region-CNN(区域卷积神经…

jsp基本表格和简单算法表格

基本表格&#xff1b; <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd…

C# wpf 实现任意控件(包括窗口)更多拖动功能

系列文章目录 第一章 Grid内控件拖动 第二章 Canvas内控件拖动 第三章 任意控件拖动 第四章 窗口拖动 第五章 附加属性实现任意拖动 第六章 拓展更多拖动功能&#xff08;本章&#xff09; 文章目录 系列文章目录前言一、添加的功能1、任意控件MoveTo2、任意控件DragMove3、边…

Navicat的使用--mysql

表关系 数据库的操作&#xff0c;表字段的设计&#xff0c;一般都由于图形化界面工具Navicat完成。 而表中数据的增删改查&#xff0c;需要熟悉sql语句。 一对一 一对一&#xff1a;一个A对应一个B&#xff0c;一个B对应一个A 将A或B任意一张表的主键设置为外键 一对多 一…

贷款行业极难获客,怎么获取实时客户数据?

我们能想象当客户有贷款需求时会发生什么吗&#xff1f; 客户可能会打开手机搜索“如何借款”、“哪笔贷款利息低”、“最多能借多少钱”、“贷款需要什么条件”等关键词&#xff0c;然后&#xff0c;客户点击进入第一个链接&#xff0c;然后填写他们的姓名和电话号码来测试他…