在R中使用unzip():如何处理重复的文件名?

时间:2016-07-06 23:36:25

标签: r unzip

我有大量的嵌套目录,其中.ZIP文件包含我想在R中循环的.CSV文件,使用unzip()提取内容,然后将csv文件读入R.

但是,在许多情况下(数千个文件),在同一目录中有多个.zip文件,其中包含具有相同文件名的.csv文件。如果我在unzip()中设置overwrite = FALSE参数,它将忽略第一个之后的所有重复名称。我想要的是它提取所有文件,但为文件名添加一些后缀,允许将重复的文件提取到同一目录,这样我就不必创建更多嵌套的子目录来保存文件。 / p>

示例:

  

目录〜/ zippedfiles包含:

     

archive1.zip(由foo.csv,bar.csv组成),archive2.zip(foo.csv,blah.csv)

运行以下命令:

unzip('~/zippedfiles/archive1.zip', exdir='~/zippedfiles', overwrite=FALSE)
unzip('~/zippedfiles/archive2.zip', exdir='~/zippedfiles', overwrite=FALSE)

结果是

  • bar.csv
  • blah.csv
  • foo.csv

期望的结果是

  • bar.csv
  • blah.csv
  • foo.csv
  • FOO(1)的.csv

2 个答案:

答案 0 :(得分:1)

不是重命名重复的文件名,为什么不通过为每个解压缩操作分配一个单独的文件夹来保持它们的唯一性(就像您的操作系统可能会那样)。这样您就不必担心更改文件名,最终会得到一个引用所有解压缩文件夹的列表:

setwd( '~/zippedfiles' )

# get a list of ".zip" files
ziplist <- list.files( pattern = ".zip" )

# start a fresh vector to fill
unzippedlist <- vector( mode = "character", length = 0L )

# for every ".zip" file we found...
for( zipfile in ziplist ) {

    # decide on a name for an output folder
    outfolder <- gsub( ".zip", "", zipfile )

    # create the output folder
    dir.create( outfolder )

    # unzip into the new output folder
    unzip( 'zipfile', exdir = outfolder, overwrite=FALSE )

    # get a list of files just unzipped
    newunzipped <- list.files( path = outfolder, full.names = T )

    # add that new list of files to the complete list
    unzippedlist <- c( unzippedlist, newunzipped )
}

向量unzippedlist应该包含所有解压缩的文件,每个文件都是唯一的,不一定是文件名,而是目录 filename的组合。因此,您可以将其作为矢量传递以捕获所有文件。

答案 1 :(得分:0)

您的解决方案可能是使用system()/ system2(),然后使用无数的unix方法之一来实现它。