利用MATLAB批量對文件重命名
來自專欄常用科研軟體技巧5 人贊了文章
利用MATLAB批量對文件重命名
tags:
- MATLAB- 科研軟體
序
沒paper,實驗肯定要做啊,不做就畢不了業 。
編程這方面,編程是不可能編程的,這輩子不可能編程的 。paper又發不了 就是寫這種東西 才能維持的了生活這樣子
進實驗室感覺像回家一樣 在實驗室里的感覺比寢室里感覺好多了! 裡面個個都是人才,說話又好聽,我超喜歡裡面的!——竊·格瓦拉
前段時間想著天天做實驗太無聊了,可以抽時間把平時自己一些科研的小tips分享出來,這樣至少可以做到有些輸出,而不是每天都是做無聊的實驗,幾年如一日,毫無社交毫無長進。
這個系列打算一直做下去,這部分就是關於MATLAB的。MATLAB這麼強大的工具除了可以用來做科學計算,模擬模擬以外還可以助力我們平時的科研辦公。所以,平時用的到MATLAB的小夥伴們可以一起交流學習一下。以下正文:
背景:
有時候文件夾中有一堆相同類型的文件,剛開始拷貝進去的時候排列的順序就是按照我們最開始放進去的時間來排列的(即按照最新修改順序),但是後面我們可能對立面的某些文件作出一些修改,那這樣順序就變了,但是我又只想要最開始的排列順序。
因為文件名完全無規則,我們無法通過文件名的索引順序排列。這個時候就得在最開始的時候就對文件進行重命名,讓文件名本身帶上數字或者字母等方便排序的內容。但是一個文件就操作的一次的話是很累的一件事。
方案:
所以今天給大家介紹下我的做法,用MATLAB實現批量修改文件名稱,包括兩種方法:一種是自由度比較小的,只能在文件本身名字的基礎上加上前綴或者後綴,可以是數字或字母另一種是自由度比較大的,不過在中間修改文件名字的時候要藉助Excel。
可以看自己的需求選用吧,文末會附上實現的完整代碼。下面分別介紹兩種方法。方案一:
- 先獲取指定路徑下的所有特定文件名稱,此處用到dir函數
path =D:my data實驗數據IV測試20170222;Files= dir(strcat(path,*.xlsx));%這是要改的文件名的目錄,我的是xlsx文件
利用循環將每個文件依次重命名,順序是按照在該文件夾下本來的順序。這裡為了不破壞原有文件,我們選擇copyfile函數把文件複製為新文件到其他地址。
for i=1:length(Files) x1=Files(i).name;%取出第一個文件的名稱 a = sprintf(%03d,i);%類似『0001』為前綴的命名方式,數字依次遞增 x2=num2str(a);%轉為字元串 x3=strcat(x2,-,x1); copyfile([path x1],[D:處理好的數據 x3]);%複製到「處理好的數據」文件夾中end
到這裡,所有的文件就按照順序重命名為新的格式了,存在「處理好的數據」文件夾中。且命名的格式是按照你設定的格式。
方案二:
1. 先獲取指定路徑下的所有特定文件名稱,此處還是用到dir函數
path =D:my_data-201508-201710 est-dataIV-test20170702;%需要重命名的文件所在的地址。此處應當注意文件地址中不要出現空格,否則程序會報錯Files = dir(strcat(path,*.xlsx));
2. 將獲取到的文件名稱變數寫入到一個指定的Excel文件中,這裡因為我們獲取到的Files變數是一個元胞數組,每個原胞中有name屬性的變數,所以要應用循環來將每個元胞數據中的name變數提取出來。
LengthFiles = length(Files);for i = 1:LengthFiles d=Files(i).name; f(i)=cellstr(d);%轉化為字元串再進行賦值endf=f.;%轉置一下xlswrite(C:UsersyeDesktopmatlab_rename_data.xlsx,f,sheet1,A1);%先將名字數據寫入Excel數據中,以便後續在Excel中修改數據,再將修改好的數據重新讀取
3. 在Excel文件中按自己想需求修改文件名稱,這裡Excel怎樣操作就不介紹了,畢竟不同人有不同的需求。
4. 修改完之後需要做的就是如何把修改完之後的名稱變數按順序重新命名給對應的文件。這裡先把修改完的名稱變數從Excel文件中讀取出來。
[data,file_id] = xlsread(C:UsersyeDesktopmatlab_rename_data.xlsx, sheet1, A1:A78);%重新讀取的修改好的名字變數。%這裡可以指定讀取的具體單元格%比如採用xlsread(PATH, sheet1, A1:A78)這種寫法也可
5. 跟寫入Excel文件過程類似,將Excel中的名稱變數寫回每個對應的文件也需要用到循環。這裡為了不破壞原有文件,我們選擇copyfile函數把文件複製為新文件到其他地址。
for i=1:LengthFiles x1= Files(i).name; x2= file_id{i}; %注意此處是大括弧而不是小括弧因為file_id(i)是cell類型但是file_id{i}是string類型 copyfile([path x1],[D:處理好的數據 x2]); %複製到「處理好的數據」文件夾中,請確保該路徑有相應文件夾end
這樣名稱就修改完了。在「處理好的數據」文件夾中就有複製且改完名稱的數據文件。
總結
可以用matlab通過dir函數和循環批量對文件重命名,重命名的格式可以自己在程序中設定(方案一),也可以在中途藉助Excel文件設定(方案二)。方案二重命名自由度會大一些,而方案一隻能給文件加上統一格式的前綴(比如數字序號)等內容。
大家可以視情況自由選擇。最後附上方案一和二的完整代碼:
方案一:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 本程序是用於對一個文件夾裡面特定類型的文件進行固定排序,即本來文件夾里 %%%%%%% 面文件的順序是按照你想要的順序排列的(比如修改時間排序),但是你擔心以 %%%%%%% 後做出一些其他修改會改變固有的順序,而文件本身又沒有按照數字標序,則需 %%%%%%% 程序執行對文件進行標序來固定排序。所以本程序的作用就是固定文件排序。%%%%%%%%%% author:yetwanng; date:2018-07-14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%path =D:my_data-201508-201710 est-dataIV-test20170702;%此處path是你需要重命名文件所在的完整路徑。應當注意文件地址中不要出現空格,否則程序會報錯Files= dir(strcat(path,*.xlsx));%利用dir函數讀取相應路徑下的特定文件名,我的是xlsx文件 for i=1:length(Files) x1=Files(i).name;%取出第一個文件的名稱 a = sprintf(%03d,i);%類似『0001』為前綴的命名方式,數字依次遞增 x2=num2str(a);%轉為字元串 x3=strcat(x2,-,x1); copyfile([path x1],[D:處理好的數據 x3]);%複製到「處理好的數據」文件夾中end clear;clc;
方案二(上):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 本程序是用於對一個文件夾裡面特定類型的文件名進行批量提取,然後進行批量 %%%%%%% 修改。即先讀取指定路徑下的特定類型文件的全部名字,並把名字存在數組變數 %%%%%%% 中,然後把數組變數寫到Excel文件中去,方便自己來修改。%%%%%%%%%%%%%%%%%%%%%%% author:yetwanng; date:2018-07-14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%path =D:my_data-201508-201710 est-dataIV-test20170702;%此處path是你需要重命名文件所在的完整路徑。應當注意文件地址中不要出現空格,否則程序會報錯Files = dir(strcat(path,*.xlsx));%利用dir函數讀取相應路徑下的特定文件名,我的是xlsx文件LengthFiles = length(Files);for i = 1:LengthFiles d=Files(i).name; f(i)=cellstr(d);%轉化為字元串再進行賦值endf=f.;%轉置一下xlswrite(C:UsersyeDesktopmatlab_rename_data.xlsx,f,sheet1,A1);%先將名字數據寫入Excel數據中,以便後續在Excel中修改數據,再將修改好的數據重新讀取clear;clc;
方案二(下):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 本程序是承接files_rename_read程序,在其讀取了文件名字寫入Excel文件中 %%%%%%% 然後在Excel修改完名稱後,本程序是用於將修改完後的Excel文件中的名字變 %%%%%%%% 量重新給對應文件命名。為了不破壞原本的文件,選擇新的文件夾,將文件完整 %%%%%%% 的複製為重新命名後的文件。%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% author:yetwanng; date:2018-07-14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%path =D:my_data-201508-201710 est-dataIV-test20170702;%需要重命名的文件所在的地址。此處應當注意文件地址中不要出現空格,否則程序會報錯Files = dir(strcat(path,*.xlsx));%利用dir函數讀取相應路徑下的特定文件名,我的是xlsx文件[data,file_id] = xlsread(C:UsersyeDesktopmatlab_rename_data.xlsx, sheet1, A1:A78);%重新讀取的修改好的名字變數。%這裡可以指定讀取的具體單元格%比如採用xlsread(PATH, sheet1, A1:A78)這種寫法也可 LengthFiles = length(Files); for i=1:LengthFiles x1= Files(i).name; x2= file_id{i}; %注意此處是大括弧而不是小括弧因為file_id(i)是cell類型但是file_id{i}是string類型 copyfile([path x1],[D:處理好的數據 x2]); %複製到「處理好的數據」文件夾中,請確保該路徑有相應文件夾end clear;clc;
推薦閱讀: