【问题标题】:Loop through .fig files and group them into folders based on the file name循环遍历 .fig 文件并根据文件名将它们分组到文件夹中
【发布时间】:2018-11-12 12:50:54
【问题描述】:

我有很多这样命名的 .fig 文件:20160922_01_id_32509055.fig、20160921_02_id_53109418.fig 等等。

所以我认为我创建了一个脚本,该脚本循环遍历文件夹中的所有 .fig 文件,并根据文件名中的最后一个数字将它们分组(复制)到另一个文件夹中。该文件夹是根据 ID 号创建的。这可能吗?

我一直在寻找涉及遍历文件夹的其他解决方案,但我很新鲜。这将使我在学习在 Matlab 中做其他事情时更容易检查 .fig 文件。

【问题讨论】:

  • 第一个“数字”显然是一个日期......按日期对它们进行分组不是更有意义吗??
  • 我也是这么想的,但是他们太多了,最后我真的不在乎日期而是ID。但感谢您的意见。

标签: matlab


【解决方案1】:

使用 MATLAB 一切皆有可能!我们可以使用dir 获取所有.fig 文件,然后使用regexp 获取每个文件名的数字部分,然后使用copyfile 将文件复制到它的新家。如果你想移动它,你可以改用movefile。

% Define where the files are now and where you want them.
srcdir = '/my/input/directory';
outdir = '/my/output/directory';

% Find all .fig files in the source directory
figfiles = dir(fullfile(srcdir, '*.fig'));
figfiles = {figfiles.name};

for k = 1:numel(figfiles)
    % Extract the last numeric part from the filename
    numpart = regexp(figfiles{k}, '(?<=id_)\d+', 'match', 'once');

    % Determine the folder we are going to put it in
    destination = fullfile(outdir, numpart);

    % Make sure the folder exists
    if ~exist(destination, 'dir')
        mkdir(destination)
    end

    % Copy the file there!
    copyfile(fullfile(srcdir, figfiles{k}), destination)
end

【讨论】:

  • 太棒了,MATLAB 看起来真的很不错,今天晚些时候我会尝试一下并告诉它进展如何,非常感谢您的帮助。顺便说一句,在稍后阶段,我想比较相同的 ID,但可以说是 + 或 - 1000。可以在“?
  • @HumbleMan 那么numpart 是一个代表该数字的字符串,因此您可以使用str2double 将其转换为数字,然后进行任何您想要的比较。你必须尝试一下。还有一些人(包括我)会争辩说,这种文件操作是 MATLAB 的弱点之一。
  • 你能帮我多一点吗,我如何让 id 相差 10%?这意味着如果一个 id 比另一个 id 少或多 10%,它将通过并被复制。
  • 我尝试了脚本顺便说一句,它正在工作!唯一的事情是它为这些 .fig 文件创建了 id 也只存在一次的文件夹,从而产生了很多文件夹。是否可以调整代码以便仅在找到至少两个具有相同 ID 的 .fig 文件时才创建一个文件夹? :)
  • @HumbleMan 10% 的事情有点模糊,因为你可以有一个 ID 与其他两个 ID 相差 10% 以内(一个高一个低)。您确实需要为每个文件夹指定一个 ID 范围。
【解决方案2】:

以下是如何识别和复制文件的示例。我会让你做for循环:)

>> Figs = dir('*.fig');    % I had two .fig files on my desktop
>> Basename = strsplit(Figs(1).name, '.'); 
>> Id = strsplit(Basename{1}, '_');
>> Id = Id{3};
>> mkdir(fullfile('./',Id));
>> copyfile(Figs(1).name, fullfile('./',Id));

玩弄这些命令,看看它们做了什么。它应该很简单:)

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多