使用R解压缩包含相同名称的多个文件

时间:2018-10-11 15:28:31

标签: r dataframe rstudio unzip

我的文件夹中有105个压缩文件。它们都包含一个同名的csv文件,即“ EapTransactions_1”

当前,我正在R中使用以下代码将它们全部提取到新文件夹中:

library(plyr)    
outDir<-"C:/Users/dhritul.gupta/Migration Files/Trial1/extract"
zipF=list.files(path = "C:/Users/dhritul.gupta/Migration Files/Trial1", pattern = "*.zip", full.names = TRUE)
ldply(.data = zipF, .fun = unzip, exdir = outDir)

这种方法的问题在于,由于所有文件名都相同,因此每个文件名都将被覆盖,并且仅保存最后一个。

在提取过程中是否有通过重命名它们或在文件名中添加前缀/后缀来保存它们中的每一个的方法?

2 个答案:

答案 0 :(得分:1)

在进行使用file.rename的呼叫之前,您可以尝试使用unzip在每个文件的末尾添加一个唯一的数字:

zipF <- list.files(path = "C:/Users/dhritul.gupta/Migration Files/Trial1",
    pattern = "*.zip", full.names = TRUE)
file.rename(zipF, paste0("EapTransactions_", 1:105))
ldply(.data=zipF, .fun=unzip, exdir=outDir)

答案 1 :(得分:0)

我试图根据蒂姆的想法建立一些东西。当我将文件存储在临时位置以重命名文件时,它对我有用。然后,我将重命名的文件移到了最终目的地,并删除了临时文件。

TempoutDir <-"C:/Users/dhritul.gupta/Migration Files/Trial1/extract/Temp" # Define a temp location

setwd(TempoutDir) #setwd for rename/remove functions to work

for (i in 1:length(zipF))
{
  unzip(zipF[i],exdir=TempoutDir,overwrite = FALSE)  

  #Files are overwritten because of same name. Give a new name to the file with a random number using runif and save them at the final location. Delete the files in temp folder

  a <- c(list.files(TempoutDir)) #Vector with actual file name

  b <- c(paste(runif(length(list.files(TempoutDir)), min=0, max=1000 ),as.character(list.files(TempoutDir))))
  #Vector with an appended temp number in front of the file name

  file.rename(a,b) # Rename the file in temp location
  file.copy(list.files(TempoutDir),outDir) # Move file from temp location to main location
  file.remove(list.files(TempoutDir)) # Delete files in Temp location
  rm(a)
  rm(b) #Delete vectors a,b from environment

}

您应该将所有文件移动到所需的文件夹,文件名前应添加随机数,而temp文件夹中应无任何内容