问题一:老爸看到有好多评书分别装在各自的文件夹(60多个)中,让我把这些文件夹的名字打出来,他好从里面选;
问题二:先选了“乱世枭雄”后,里面的文件名为:“乱世枭雄(1).mp3 …… 乱世枭雄(301).mp3”,而在iTunes里面的排列顺序是:
乱世枭雄(1).mp3
乱世枭雄(10).mp3
乱世枭雄(11).mp3
……
乱世枭雄(2).mp3
乱世枭雄(20).mp3
乱世枭雄(21).mp3
……
乱世枭雄(301).mp3
所以,作为评书的话,这样导如iPhone后没法听了,应该把文件名改为“乱世枭雄(001).mp3”,这样的话就可以在iTunes里面正常排序了。
开始有点儿头大,不知道该怎么办,一个一个弄有点儿麻烦,显然不可取,于是想到了R,在Google上稍作研究后,很快搞定了两个问题,以下是我的解决办法,与大家交流,如果觉得搞得太弱智还请多包涵!
假设:评书MP3的文件夹都存放在“D:\评书”下,评书《乱世枭雄》都存放在“D:\评书\乱世枭雄”下。
R文件解决方案
解决方案一:
用过使用dir()函数就可以将文件夹中的内容显示出来,转为data.frame就可以写入一个文本文件进行编辑、打印等一般性操作,代码如下:
- dir1 <- "D:\\评书"
- setwd(dir1) #将要查看文件夹名称的文件夹设为当前工作目录
- fl <- dir() #将目录列表赋值给变量
- fl <- as.data.frame(fl) #将变量转为data.frame以便执行后面的写入操作,此步骤也可与上面一并执行
- write.table(fl, file="评书目录.txt", quote=F, col.names=F) #将数据框fl写入文本文件,由于写入时会有引号,所以加参数去掉,列名称被去掉了,或者可以改成想要的列名称,另外如果不想要每一行的序号还可以加入“row.names=F”
解决方案二:
这个问题的解决其实就是把这一文件夹中的所有评书MP3文件名列表想象成一个向量,然后对这个向量进行操作,把它改为我们想要的文件名列表,最后利用file.rename()函数进行修改。过程如下:
步骤一:准备工作
首先要准备好被赋值的原始文件名向量,观察特征,并转为character。
- dir2 <- "D:\\评书\\乱世枭雄"
- setwd(dir2)
- fl_1 <- dir()
- fl_2 <- as.character(fl_1)
通过观察fl_2,可以看到,在R里面其顺序也为:
乱世枭雄(1).mp3
乱世枭雄(10).mp3
乱世枭雄(11).mp3
……
乱世枭雄(2).mp3
乱世枭雄(20).mp3
乱世枭雄(21).mp3
……
乱世枭雄(301).mp3
当然,这并不重要,我们只需要直接对其进行文本操作就可以了。
步骤二:修改文件名列表
其实这一步的目的就是对字符串向量fl_2进行查找替换操作,将“乱世枭雄(1).mp3”等改为“乱世枭雄(001).mp3”,再将“乱世枭雄(10).mp3”等改为“乱世枭雄(010).mp3”,这样的话目的就达到了,这里要用些简单的正则表达式和gsub()函数,代码如下:
- fl_2 <- gsub("(\\()([0-9]{1})(\\))", "\\100\\2\\3", fl_2) #查找“(1)”等,并改为“(001)”至“(009)”
- fl_2 <- gsub("(\\()([0-9]{2})(\\))", "\\10\\2\\3", fl_2) #查找“(10)”等,并改为“(010)”至“(099)”
此时,查看fl_2就会看到已经变为:
乱世枭雄(001).mp3
乱世枭雄(010).mp3
乱世枭雄(011).mp3
……
乱世枭雄(002).mp3
乱世枭雄(020).mp3
乱世枭雄(021).mp3
……
乱世枭雄(301).mp3
而且顺序没有变,这样就可以进行重命名操作。
步骤三:文件重命名
由于fl_1是dir()直接赋值过来,因此其代表了系统文件名,而fl_2的顺序与fl_1一一对应,仅仅是对字符串进行了查找替换操作,因此可以放心利用file.rename()重命名文件,代码如下:
- file.rename(fl_1, fl_2) #函数形式为file.rename(from, to),from为原始文件名向量,to为新的文件名向量
稍等片刻,就会看到文件名已经改好了,具体时间视修改数量,但其实我改了300多个文件也就是一瞬间的事儿。
结语
上述提到的函数当然都可以用“?函数名”的方式查看,特别是用“?file.rename”查看时,会看到很多文件操作的函数,各位可以做进一步研究。从这个操作例子就可以看出,作为强大的统计软件,R的功能其实可以大大扩展,因为其在向量运算和其他操作方面具有很大的优势,利用这一优势,对字符数据进行操作、整理,甚至是处理一些比较乱得原始txt和csv文档都很有帮助,效率极大提高。例如,我现在就编了一个.r文件,每天帮我整理下载的数据,比原来在Excel上面操作快得多。
最后,还是希望大家多提宝贵意见,高手走过笑过,需要帮助的朋友有一点启发我就很开心了,呵呵!