首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R,Rename.file迭代

R,Rename.file迭代
EN

Stack Overflow用户
提问于 2013-03-20 23:39:41
回答 1查看 594关注 0票数 2

我正在尝试用R语言编写一个算法,它允许我重命名文件。我想将文件夹中的所有pdf文件重命名为1,2,3,4,5,...并保留pdf扩展名。主要的困难如下:我的文件夹包含文件和文件夹,这些文件夹包含文件和文件夹等。我希望所有这些子文件夹中的所有pdf文件都是由数字命名的,从1开始,直到这个特定文件夹中的文件数量(例如,遵循字母顺序)!另一个困难:我的文件夹也包含非pdf文件!

下面是一个示例:(在下面的示例中,文件夹1包含folder2和3个文件。文件夹二包含4个文件。)

代码语言:javascript
复制
Folder1   "contains"   folder2     "contains"   Bzzz.file.R
                       A.file.txt               B.file.pdf
                       Bla.file.pdf             C.file.pdf
                       C.file.pdf               Delta.file.pdf

..。应该变成这个……

代码语言:javascript
复制
Folder1  "contains"  folder2   "contains"  Bzzz.file.R
                     A.file.txt            1.pdf
                     1.pdf                 2.pdf
                     2.pdf                 3.pdf

无论文件夹的数量是多少,以及文件夹的起始深度有多深,该算法都应该有效

如果这样可以工作,即使在一些文件夹中已经有名为3.pdf或其他number.pdf的文件,也会更好一些,但实际上我可以在没有这种灵活性的情况下处理!

非常感谢你的帮助!

我运行了这段代码,但它并不完全有效。如果我只是运行它,我会得到这样的错误消息:"Error in If (is.na(pathname)) {:参数的长度为零“(我不得不将这个错误消息从法语翻译过来,所以可能会有一些与我们可以从R得到的英语错误消息不匹配)。

然后我意识到d很奇怪,因为它包含一个名为“”的目录。在我的文件夹中没有的第一个位置(顺便问一下,你有什么解释吗?!)

所以我做了d<-d-1,然后重新运行大的lapply,我得到了这个错误消息:

"Error in setwd(dx):change to change working directory“确实第一个文件夹中的文件被重命名,但仅在第一个文件夹中

下面是list.dirs()提供的功能:

".“”./3.9月“"./4.Oct”"./5.Nov“"./6.Dec”

但我只有4个文件夹。没有名为".“的文件夹!正如我所说的,如果我执行了d<-d-1,则代码在更改目录时不会成功,因此只重命名了一个文件夹

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-21 00:03:22

由于list.files()默认情况下按字母顺序返回文件,因此可以非常简单地实现这一点,方法如下:

代码语言:javascript
复制
# Navigate to top directory using setwd("my/top/directory/here")
# This code will then rename all pdfs in the current directory and ALL sub-directories
setwd( "C:/whatever/directory" )    
    # Navigate to top directory using setwd("my/top/directory/here")
d <- list.dirs()
lapply( 1:length(d) , function( x ){ 
    require( R.utils)
    f <- list.files( path = getAbsolutePath( d[x] ) , pattern = "*.pdf" , full.names = TRUE )
    lapply( seq_len( length(f) ) , function(y) {
        file.rename( f[y] , paste( dirname( f[y] ) ,"/" , y , ".pdf" , sep = "" ) )
        })
    })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15528121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档