移至主內容

用R處理字串的簡單示範

Submitted by 肥貓 on

因為我喜歡將從開放式課程網頁下載得到的影片檔轉換成音檔,存入手機等方便隨身攜帶與收聽,便衍生出使用命令列(本例為ffmpeg)批次處理的需求。一種方法是用WinFF來代勞,但是若有客製化需求的時候,直接打命令列還是比較乾脆。但是我當然不想傻傻地一個一個檔案慢慢key,便需要利用R的字串處理工具,把變數(如檔案路徑與名稱)和命令式整合在一起。以下示範相關過程與程式碼。

  • 前處理:設定變數與欄位

第一步是先設定變數與欄位,所以我先在Calc做了兩欄,一欄是來源檔的檔名和路徑(在Ubuntu,你可以透過複製該檔,在Calc直接以純文字貼上該檔案路徑);另一欄則是你想要的格式,如果你想做得細一點,也可以再新增一欄鍵入各種參數。

由於R的匯入資料功能使用xls檔比較方便,所以我最後是將其存成xls檔,而非開放格式的ods或csv等格式。

  • 後處理:使用R的匯入與字串處理功能

進入R(本例是使用RStudio)之後,你可以直接使用File ->Import Dataset的功能,匯入剛才存好的xls檔。也可以鍵入程式碼來匯入。以下是我使用到的程式碼。以下指令是假定你了解R的基本操作,若是新手請先爬文或參閱相關工具書。

#匯入xls檔

library(readxl)
ffmpeg <- read_excel("Nextcloud/R_temp/ffmpeg.xls")

#前處理
attach(ffmpeg) #將該檔案匯入工作區
a=paste("ffmpeg -i " ,filename," ", filename,".",format_output, sep="")

#這個階段就會變成數十行的ffmpeg -i 的命令式;但是在終端機打command line,不宜有換行的標記

#所以還要再加一個collapse的指令,將換行符號取代成分號,這樣才能直接批次使用。當然你也可能直接合併這兩個指令(如下)
paste(a, collapse=";")

b=paste(a, collapse=";") #把剛才的結果存成新的物件
b #確定你做出來的東西對不對,也可以將結果直接在終端機複製貼上
write(b, file='Nextcloud/R_temp/data.txt') #若您希望重複使用,就把他存成文字檔

理論上做出來的結果,會變成如下的格式。雖然後者產出的檔案名字有點醜,不過還算堪用啦:

ffmpeg -i /home/fattabby/下載/filename1.mp4 /home/fattabby/下載/filename1.mp4.mp3;ffmpeg -i /home/fattabby/下載/filename2.mp4 /home/fattabby/下載/filename2.mp4.mp3;...;ffmpeg -i /home/fattabby/下載/filenameN.mp4 /home/fattabby/下載/filenameN.mp4.mp3

這樣便能批次轉換數十個,甚至數百個以上的檔案,有助於節省傳統方法必須守著螢幕的時間成本。