【问题标题】:Renaming JPG files in R在 R 中重命名 JPG 文件
【发布时间】:2017-10-25 12:29:20
【问题描述】:

我有一张田野地图,我在其中拍摄了地块的图像。照片是从左到右拍摄的,像这样蜿蜒曲折;所以,从 101, 118, 119, 136,137,138,135,120,117,102,103,116...等。图片也按此顺序排列;但是,它们的名称与绘图不对应,文件名看起来像这样 100_498、100_499、100_500、100_501。因此,为了获得更多详细信息,情节 101 等于文件 100_498,情节 118 等于文件 100_499 等...我需要能够根据他们在现场拍摄照片的方式将文件重命名为它们对应的情节。下面的地图。如果我用我的代码重命名它们,它会从上到下,因为它是蛇形的,所以图片在文件夹中是有序的。

现在我需要重新编写 R 代码...有什么建议吗??? 我需要重命名这些文件,使其与此图相对应。

这是我的代码,如果他们会从下到上获取数据并蜿蜒曲折... 101、102、103、104、105、106、107、108、109、110、111、112..等等。

Plot map
109 110 127 128 145
108 111 126 129 144
107 112 125 130 143
106 113 124 131 142
105 114 123 132 141
104 115 122 133 140
103 116 121 134 139
102 117 120 135 138
101 118 119 136 137

f <-list.files(pattern="*.JPG") #imports files names
head(f) #first 6 rows of data

new_names <- paste("Plot_", #create new file name
               formatC(seq(length(file_names)), #writes the number in 
                #sequential order
               width=2,flag="0"), 
               ".JPG",sep="")
head(new_names) #first 6 rows of data
file.rename(from=f, to=new_names) #replaces old file name with new file name
list.files(pattern=".JPG") #check to make sure it was done

【问题讨论】:

    标签: r rename


    【解决方案1】:

    以下函数将fileno 转换为您正在寻找的100_498 格式。此示例适用于您的特定情况,但如果您需要更普遍地使用它,您可能希望对其进行参数化。

    filecoords <- function(fileno){
      fcol <- 498 + (fileno - 101) %/% 9
      frow <- ifelse(fcol %% 2, 108-((fileno-101) %% 9),100+((fileno-101) %% 9))
      return(paste(frow, fcol, sep="_"))
    }
    
    filecoords(c(101, 105, 124))
    
    [1] "100_498" "104_498" "105_500"
    

    反函数也可能有用。它接受诸如“104_498”之类的字符串,并使用绘图图中的数字返回文件名“Plot_nnn”。

    filenos <- function(coord){
      coords <- as.numeric(unlist(strsplit(coord,"_")))
      base <- 9*(coords[2]-498)+101
      fileno <- base+ifelse(coords[2] %% 2,8-((coords[1]-100) %% 9),(coords[1]-100) %% 9)
      return(paste0("Plot_",fileno))
    }
    
    filenos("105_500")
    [1] "Plot_124"
    

    所以你可以使用类似这样的东西来重命名你的文件...

    oldfiles <- list.files(pattern="\\.JPG") #get list of files
    oldfilestems <- gsub("\\.JPG","",oldfiles) #remove the suffix
    newfilestems <- sapply(oldfilestems,filenos) #assumes your old file stems are "100_498" format
    newfiles <- paste0(newfilestems,".JPG") #add the suffix
    file.rename(oldfiles,newfiles) #rename
    

    【讨论】:

    • 我认为这是我想要的,通过以正确的顺序重命名文件。我只需要将所有文件的文件从当前文件名 100_3753 转换为文件名 Plot_101。
    • 我添加了一个反函数 - 这有帮助吗?
    • 是的,这确实有很大帮助。但是,我在编码方面遇到了一个问题……所以图 101、118、119、136、137 应该分别等于当前文件名 100_498、100_499、100_500、100_501 和 100_502。我认为地块 101、119 和 137 是正确的,但地块 118 和 136 都是负 6 个地块。
    • 另外...这并没有改变我文件夹中的实际文件名...f
    • 对不起公式中的错误。我现在在上面更正了它,并添加了一些关于如何实际重命名文件的内容。
    【解决方案2】:

    以下函数创建一个查找表以将一个方向的之字形转换为另一个方向的之字形...

    zigzag <- function(n=45,r=9){ #n=number of plots, r=number of rows
      #create desired new order as a matrix
      new <- matrix(1:n,nrow=r)
      even <- 2*seq_len(ncol(new)/2)
      new[,even] <- apply(new[,even],2,rev)
    
      #create old order as a matrix
      old <- t(matrix(1:n,ncol=r))
      even <- 2*seq_len(nrow(old)/2)
      old[even,] <- t(apply(old[even,],1,rev))
    
      #reduce to vectors and return look-up table as a dataframe
      df <- data.frame(old=as.vector(old),new=as.vector(new))
      return(df)
    }
    

    然后您可以按如下方式重命名文件...

    lookup <- zigzag() #create lookup table
    
    oldfiles <- paste0("100_",497+lookup$old,".JPG") 
    newfiles <- paste0("Plot_",100+lookup$new,".JPG")
    
    file.rename(oldfiles,newfiles)
    
    head(oldfiles,10)
     [1] "100_498.JPG" "100_507.JPG" "100_508.JPG" "100_517.JPG" "100_518.JPG" "100_527.JPG" "100_528.JPG" "100_537.JPG"
     [9] "100_538.JPG" "100_499.JPG"
    head(newfiles,10)
     [1] "Plot_101.JPG" "Plot_102.JPG" "Plot_103.JPG" "Plot_104.JPG" "Plot_105.JPG" "Plot_106.JPG" "Plot_107.JPG"
     [8] "Plot_108.JPG" "Plot_109.JPG" "Plot_118.JPG"
    

    【讨论】:

    • 这很好用...不过我注意到的一件事是,我不得不稍微调整一下我的系统...我不得不使用我的问题中的旧代码首先按顺序重命名文件没有间隙,因为我删除了文件夹中的一些图片。新代码按第一个文件(编号)的顺序替换了名称,因此当只有 45 个图时,我将最后一个文件作为 Plot_49,因为我删除了四张图片。在我首先按顺序重命名文件后,新代码非常适合我请求代码并完美重命名文件的模式。
    猜你喜欢
    • 2021-04-29
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多