如何获取由其完整路径指定的文件的父文件夹的名称?

时间:2014-03-19 14:37:42

标签: matlab string-parsing

在Matlab中,我有一个包含文件路径的字符串:

path = 'C:/Data/Matlab/Dir/file.m'

我现在想要提取字符串的'Dir'部分。一种方法是:

[first, second, third, fourth, fifth] = strtok(path, '/')

然后取出fourth元素,最后从中删除第一个字符(/)。

我只是想知道是否有更优雅的解决方案?显式存储所有first ... fifth元素然后手动删除/似乎有点麻烦。

感谢。

9 个答案:

答案 0 :(得分:7)

您可以尝试使用fileparts函数,如下所示:

[ParentFolderPath] = fileparts('C:/Data/Matlab/Dir/file.m');
[~, ParentFolderName] = fileparts(ParentFolderPath) ;
ParentFolderName = 'Dir'

答案 1 :(得分:4)

尝试:

parts = strsplit(path, '/');
DirPart = parts{end-1};

答案 2 :(得分:4)

尝试

s = regexp(path, '/', 'split')
s(4)

here所描述的“使用拆分关键字在分隔符处拆分字符串”。

答案 3 :(得分:2)

如果您不想关心路径中的元素数量,并且不想使用旧版本的Matlab中没有的strsplit,那么您也可以使用这个衬垫:

directory = getfield( fliplr(regexp(fileparts(path),'/','split')), {1} )

%% or:
% alldir = regexp(fileparts(path),'/','split')
% directory = alldir(end)

将始终返回指定文件的父文件夹。

您还应该考虑使用filesep而不是'/'来更好地兼容各种系统。

答案 4 :(得分:2)

如果您不知道有多少个文件夹正在分层,请用一行代码查找父目录

fliplr(的strtok(fliplr(PNAME)' \'))

答案 5 :(得分:0)

还有很好的老路......

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)

答案 6 :(得分:0)

最大解决方案适用于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

答案 7 :(得分:0)

parts = strsplit(file_path, filesep);
parent_path = strjoin(parts(1:end-1), filesep);

答案 8 :(得分:0)

[filepath,name,ext] = fileparts(文件名)函数也可能对您有用。

通常用于分隔文件的父文件夹,文件名及其扩展名。

如何使用它?

parentFolder = fileparts(filename); % first parent
secondGenParent = fileparts(fileparts(filename)); % second order parent

以此类推。