Как получить имя родительской папки файла указан полный путь?
в MATLAB, у меня есть строка, содержащая путь к файлу:
path = 'C:/Data/Matlab/Dir/file.m'
Я хочу теперь хочу извлечь 'Dir
часть строки. Один из способов сделать это:
[first, second, third, fourth, fifth] = strtok(path, '/')
а затем возьмите fourth
элемент и, наконец, удалите из него первый символ (/
).
мне просто интересно, есть ли более элегантное решение? Кажется немного громоздким, чтобы явно хранить все first
... fifth
элементы, а затем вручную удалить /
.
спасибо.
8 ответов
попробовать
s = regexp(path, '/', 'split')
s(4)
Как рассказали здесь в "Split String at Delimiter с использованием ключевого слова split".
вы можете попробовать функцию fileparts следующим образом:
[ParentFolderPath] = fileparts('C:/Data/Matlab/Dir/file.m');
[~, ParentFolderName] = fileparts(ParentFolderPath) ;
ParentFolderName = 'Dir'
найдите родительский каталог с одной строкой кода, если вы не знаете, сколько папок наслаивается
fliplr(strtok(fliplr (pname),'\'))
если вы не хотите, чтобы заботиться о количестве элементов вашего пути, и вы не хотите использовать strsplit
, который недоступен в более старых версиях Matlab, вы также можете использовать этот лайнер:
directory = getfield( fliplr(regexp(fileparts(path),'/','split')), {1} )
%% or:
% alldir = regexp(fileparts(path),'/','split')
% directory = alldir(end)
который всегда будет возвращать родительскую папку указанного файла.
вы также должны рассмотреть возможность использования filesep
вместо '/'
чтобы получить лучшую совместимость с различными системами.
есть еще старый добрый способ...
n=size(path,2);
while path(n)~='/'; n=n-1; end
i=n-2;
while path(i)~='/'; i=i-1; end
% result
path(i+1:n-1)
Max решение хорошо для windows, но может потерпеть неудачу на linux/mac из-за косой черты в начале абсолютных путей. Мое предложение было бы:
parts = strsplit(path, filesep);
DirPart = parts{end-1};
if path(1) == filesep
DirPart = [filesep,DirPart];
end
if path(end) == filesep
DirPart = [DirPart,filesep];
end