在Matlab中,我有一个包含文件路径的字符串:
path = 'C:/Data/Matlab/Dir/file.m'
我现在想要提取字符串的'Dir
'部分。一种方法是:
[first, second, third, fourth, fifth] = strtok(path, '/')
然后取出fourth
元素,最后从中删除第一个字符(/
)。
我只是想知道是否有更优雅的解决方案?显式存储所有first
... fifth
元素然后手动删除/
似乎有点麻烦。
感谢。
答案 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)
答案 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
以此类推。