changing the name of multiple csv files in a folder
12 ビュー (過去 30 日間)
古いコメントを表示
I have a folder containing 3000 csv files. All of these are named in the format: cor0.1 sc10 fc0.1_0.csv.
I want to change the name of all of these files to c0_1f0_1_0.csv.
Is there a way i can write a loop to do this for me?
0 件のコメント
採用された回答
Mathieu NOE
2021 年 1 月 15 日
hello
this is a first attempt
I prefered to create the renamed copies in a separate folder
also my code will probably need some upgrade as I don't know how the numberring inside your filenames can evolve among your 3000 files
d = dir('*.csv')
dir_out = [cd '\out']
for ci = 1:numel(d)
filename = d(ci).name;
ind_und = strfind(filename,'_'); % search underscores
ind_dot = strfind(filename,'.'); % search dots
ind_f = strfind(filename,'f'); % search "f"
new_filename = [filename(1) filename(ind_dot(1)-1) '_' filename(ind_dot(1)+1) filename(ind_f ),...
filename(ind_dot(2)-1) '_' filename(ind_dot(2)+1) '_' filename(end-4:end)];
copyfile(filename,fullfile(dir_out,new_filename));
end
9 件のコメント
Stephen23
2021 年 1 月 15 日
Rather than fragile indexing, it better to use fileparts to split the filename and file extension:
その他の回答 (1 件)
Matt Gaidica
2021 年 1 月 15 日
編集済み: Matt Gaidica
2021 年 1 月 15 日
csvPath = '/path/to/files';
filelist = dir(fullfile(csvPath,'*.csv'));
for iFile = 1:numel(fileList)
thisFile = fullfile(csvPath,fileList(iFile).name);
movefile(thisFile, strrep(thisFile,'old','new'));
end
This is just psuedocode. I don't quite see how you're mapping the old filename to the new one, so I just placed a string replace function in the loop. If you need help on that piece, please post more details.
See:
6 件のコメント
Stephen23
2021 年 1 月 15 日
This SPRINTF call does not use its inputs for anything:
new = sprintf('c0_1f0_1.csv',ii,jj)
参考
カテゴリ
Help Center および File Exchange で File Operations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!