【问题标题】:Batch renaming files in R [duplicate]R中的批量重命名文件[重复]
【发布时间】:2017-12-22 09:15:46
【问题描述】:

我有一个包含数千个文件的目录,我想重命名这些文件的子集。

这是我正在尝试做的一个高度简化的示例:

    library(dplyr)    
    f <- as.data.frame(list.files(), header=FALSE)
    colnames(f) <- 'origFilename'
    f2 <- f %>% separate(origFilename, into=c('ID','date','channel','position','extension'), sep='_', remove=FALSE) 
        %>% filter(ID > 10)
    f2$ID <- as.numeric(f2$ID)
    f3 <- f2 %>% mutate(newID = ID + 1)
    f3$newFilename <- paste(f3$newID, f3$date, f3$channel, f3$position, 
    f3$extension, sep='_')
    f3$origFilename <- paste(f3$ID, f3$date, f3$channel, f3$position, f3$extension, sep='_')
    file.rename(f3$origFilename, f3$newFilename)

此代码的最后一行给出以下错误:

file.rename(f$files.old, f$files.new) 中的错误:“来自”无效 论据

关于如何解决这个问题的任何想法? 抱歉,我不确定如何在这里制作一个完全可重现的示例...

【问题讨论】:

标签: r regex dataframe vector batch-rename


【解决方案1】:

你在寻找这样的东西吗?

f <- as.data.frame(list.files(), header=FALSE)
colnames(f) <- 'files.old'
#"foo" will be added just before the extension
f$files.new <- sapply(f$files.old,function(x) gsub("^[^.]*.",paste(gsub(".[^.]*$", "", x), 'foo.', sep='_'),x))
file.rename(as.vector(f$files.old), as.vector(f$files.new))

【讨论】:

  • 这成功了!我只需要添加as.vectors。
【解决方案2】:

您的解决方案的问题是as.data.framefile.rename() 获取列表作为输入。

你可以这样做:

file.rename(list.files(), paste(list.files(), "foo", sep="_")) 

但是这样做的问题是您要更改文件的扩展名。以上会将mycode.r 更改为mycode.r_foo,然后R 无法打开。

【讨论】:

  • 我对文件名所做的更改实际上要复杂得多(并且也不会导致更改文件扩展名 - 对不起这个愚蠢的例子),所以这个解决方案并不是真的为我工作。此外,我只是想更改目录中所有文件的一个子集,所以输入list.files() 是行不通的。我将对我的问题进行一些编辑以澄清。
猜你喜欢
  • 2018-04-26
  • 2013-12-19
  • 2016-04-09
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
相关资源
最近更新 更多