正则表达提取文件夹内含有特殊名字的文件按名称排序并按顺序合并文件

该文章描述了一个使用MATLAB的脚本过程,首先通过正则表达式在多个子文件夹中查找特定命名模式的文件,并复制到一个新的整合文件夹。接着,从文件名中提取日期部分并转化为数字进行排序,最后按照排序顺序合并所有文件到一个CSV文件中。
摘要由CSDN通过智能技术生成

问题描述:用正则表达先将几个文件夹内含有特殊名字的文件提取出来放到一个整合文件夹里,然后利用文件名中的16-23-1136这种日期来排序,先将其转化为数字然后按数字大小排序生成一个文件名列表。将整合文件夹的文件按排序后的文件名列表排序合并为一个文件完成整合。

%复制文件到整合文件夹
onefilepath = 'E:\office文件';
folderInfo = dir(onefilepath);
% 筛选出所有的子文件夹名称
subFolderList = {folderInfo([folderInfo(:).isdir]).name};
subFolderList(ismember(subFolderList,{'.','..'})) = []; % 去除'.'和'..'文件夹

csvonefilepath ='E:\office文件';

for i = 1:length(subFolderList)
     twofilepath = fullfile(onefilepath, subFolderList{i});
     disp(twofilepath);
     files = dir(fullfile(twofilepath, '*'));
     for j = 1:numel(files)
         if ~files(j).isdir & regexp(files(j).name, '0\.5', 'once') & regexp(files(j).name, '600', 'once')

          % 复制文件到新文件夹中
              copyfile(fullfile(twofilepath, files(j).name), csvonefilepath);
         end
     end
end
%排序合并
% 获取文件列表
onefilepath= 'E:\office文件';
files = dir(onefilepath);

% 去除'.'和'..'文件
files = files(~ismember({files.name},{'.','..'}));

% 用正则表达式提取日期时间字符串
pattern = '\d{2}-\d{2}-\d{2}_\d{4}';
datetimes = regexp({files.name}, pattern, 'match');

% 将日期时间字符串转换为数字
datetimes_num = cellfun(@(x)datenum(x, 'yy-mm-dd_HHMM'), datetimes);

% 按数字大小排序
[~, idx] = sort(datetimes_num);
files = files(idx);
disp(files(1));
nFiles = length(files);
data = {};
header = '';
for i = 1:nFiles
    % 打开文件并读取数据
    fname = fullfile(onefilepath, files(i).name);
    fid = fopen(fname);
    C = textscan(fid, '%s', 'Delimiter', '\n', 'Whitespace', '');
    fclose(fid);
    C = C{1};
    % 保留第一个文件的标题行
    if i == 1
        header = C{1};
        data = [data; C(2:end)];
    else
        data = [data; C(2:end)];
    end
end

% 将数据写入新文件
newfname = fullfile('E:\office文件', 'all-data2.csv');
fid = fopen(newfname, 'w');
fprintf(fid, '%s\n', header);
fprintf(fid, '%s\n', data{:});
fclose(fid);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值