[英]Remove certain extensions from filename with multiple extensions
我可以使用fileparts
获取不带扩展名的文件名
>> f = '/foo/bar/file.gz'
>> [~,filename,~] = fileparts(f)
filename =
'file'
但是,如果文件有多个扩展名,则只会删除最后一个
>>f = '/foo/bar/file.gz.tar'
>>[~,filename,~] = fileparts(f)
filename =
'file.gz'
我知道文件扩展名可能带有多个点是模棱两可的,但是有没有一种方法可以指定,例如,应该删除.gz
和.gz.tar
?
您始终可以手动搜索点:
[~,filename,~] = fileparts(f);
i = find(filename == '.', 1, 'first');
if ~isempty(i)
filename = filename(1:i - 1);
end
或者您可以迭代fileparts
,直到它停止更改名称:
[~, filename, ~] = fileparts(f);
prev = '';
while ~strcmp(prev, filename)
prev = filename;
[~, filename, ~] = fileparts(prev);
end
如果您要删除确切的扩展名,则要简单得多。 只需检查名称是否以该序列结尾,并根据需要删除尽可能多的字符。 对于.tar.gz
示例:
ext = '.tar.gz';
n = numel(ext);
if numel(f) >= n && all(f(end - n + 1:end) == ext)
f = f(1:end - n);
end
[~, filename, ext] = fileparts(f);
filename = [filename ext];
这将删除所有扩展:
f = '/foo/bar/file.gz.tar';
path = fileparts(f); % get folder path
fileWithExt = erase(f,[path '/']); % erase folder path from full path
fparts = strsplit(fileWithExt,'.'); % split string at dot
file = fparts{1}; % get first entry
这只会删除选择的扩展:
f = '/foo/bar/file.gz.tar.abc.xyz';
exts = {'tar','xyz'}; % extensions to remove
path = fileparts(f); % get folder path
fileWithExt = erase(f,[path '/']); % erase folder path from full path
fparts = strsplit(fileWithExt,'.'); % split string at dot
mask = ismember(fparts,exts); % mask of extensions to remove
file = strjoin(fparts(~mask),'.'); % stitch string back together
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.