别再手动点开了!用MATLAB的dir和fullfile函数,5分钟搞定文件夹里所有CSV/TXT/XLSX文件的批量读取

张开发
2026/4/13 18:20:19 15 分钟阅读

分享文章

别再手动点开了!用MATLAB的dir和fullfile函数,5分钟搞定文件夹里所有CSV/TXT/XLSX文件的批量读取
MATLAB文件批量读取实战告别重复劳动的高效数据处理方案实验室里堆积如山的CSV报告、设备生成的每日TXT日志、定期导出的XLSX数据集——这些场景下手动逐个点击文件不仅效率低下更可能因操作疲劳导致数据遗漏。本文将带您深度掌握MATLAB的dir与fullfile函数组合技实现5分钟搭建自动化文件处理流水线从此告别机械化的文件导入操作。1. 为什么需要批量读取手动操作的三大痛点每次打开MATLAB都要重复uigetfile对话框这种操作模式存在三个致命缺陷时间成本指数级增长处理100个文件需要手动操作100次而批量读取只需一次脚本执行人为错误难以避免连续点击中可能选错文件或遗漏某些文件流程无法复用下次遇到同类任务必须重新开始手工操作对比实验数据操作方式10个文件耗时100个文件耗时错误率手动uigetfile2分钟20分钟15%批量读取脚本0.5分钟0.5分钟0%实际测试环境MATLAB R2023ai7-11800H处理器NVMe SSD存储2. 核心函数组合dirfullfile的黄金搭档2.1 dir函数深度解析dir函数远不止简单的文件列表获取其返回的结构体包含丰富元数据fileInfo dir(*.csv); % 典型结构体字段 % name: 文件名data_001.csv % folder: 所在文件夹路径 % date: 修改日期字符串 % bytes: 文件大小字节 % isdir: 是否为目录 % datenum: 修改日期数值格式通配符高级用法*.csv匹配所有CSV文件data_*.xlsx匹配data_开头的Excel文件2023??_*.txt匹配2023年某月??代表两位月份的文本文件2.2 fullfile的跨平台优势相比手动拼接路径字符串% 不推荐做法Windows专用 path C:\Data\; filename [path \ data.csv]; % 推荐做法全平台兼容 filename fullfile(C:,Data,data.csv);fullfile自动适配不同操作系统的路径分隔符Windows用\Linux/macOS用/避免硬编码路径带来的兼容性问题。3. 万能文件读取函数模板以下模板函数支持自动识别CSV/TXT/XLSX格式并按需返回数据function allData batchReadFiles(folderPath, filePattern) % 获取文件列表 fileList dir(fullfile(folderPath, filePattern)); % 预分配单元格数组提升性能 allData cell(length(fileList), 2); for i 1:length(fileList) fullPath fullfile(fileList(i).folder, fileList(i).name); [~, ~, ext] fileparts(fullPath); try switch lower(ext) case {.csv, .txt} allData{i,1} readmatrix(fullPath); case .xlsx allData{i,1} readtable(fullPath); otherwise warning(不支持的文件格式: %s, fullPath); continue; end allData{i,2} fileList(i).name; catch ME fprintf(文件读取错误: %s \n 原因: %s\n, fullPath, ME.message); end end end关键增强功能自动扩展名识别错误捕获机制内存预分配优化多格式支持矩阵/表格4. 高级排序与处理技巧4.1 按文件名数字排序处理data_1.csv到data_100.csv时默认的字母排序会导致data_100.csv排在data_2.csv前面。解决方案files dir(data_*.csv); names {files.name}; num regexp(names, data_(\d)\.csv, tokens); num str2double([num{:}]); [~, idx] sort(num); sortedFiles files(idx);4.2 按修改时间过滤文件只处理最近7天修改过的文件files dir(*.xlsx); currentTime now; timeDiff currentTime - [files.datenum]; recentFiles files(timeDiff 7);4.3 并行加速处理对于大型文件集启用并行循环parfor i 1:length(fileList) % 读取和处理代码 end注意需先执行parpool启动并行工作进程5. 性能优化与异常处理内存管理技巧对于超大型文件集考虑使用datastore对象及时清除临时变量clear tempData分块处理数据避免内存溢出常见错误排查文件被占用确保所有文件未被其他程序打开编码问题中文路径使用char函数转换权限不足以管理员身份运行MATLAB日志记录方案diary(processing_log.txt); % 批量处理代码... diary off;这个日志会自动记录所有命令行输出方便事后审计。

更多文章