从R中的文件夹创建zip文件

时间:2014-05-15 02:45:51

标签: r zip

尝试使用R。

从一个文件夹创建一个zip文件

这里提到“Rcompression”包: Creating zip file from folders

但我没有找到可以为Windows系统下载此软件包的地方。

有什么建议吗?或其他函数来创建一个zip文件?

5 个答案:

答案 0 :(得分:18)

您可以非常轻松地使用zip包中的函数utils创建一个zip文件。假设您有一个目录testDir并且您希望在目录中压缩文件(或多个文件),

dir('testDir')
# [1] "cats.csv" "test.csv" "txt.txt" 
zip(zipfile = 'testZip', files = 'testDir/test.csv')
# adding: testDir/test.csv (deflated 68%)

压缩文件保存在当前工作目录中,除非在zipfile参数中指定了不同的路径。我们可以通过

查看相对于原始解压缩文件的大小
file.info(c('testZip.zip', 'testDir/test.csv'))['size']
#                  size
# testZip.zip       805
# testDir/test.csv 1493

您可以使用

压缩整个文件目录(如果没有子文件夹)
files2zip <- dir('testDir', full.names = TRUE)
zip(zipfile = 'testZip', files = files2zip)
# updating: testDir/test.csv (deflated 68%)
# updating: testDir/cats.csv (deflated 27%)
# updating: testDir/txt.txt (stored 0%)

unzip查看文件,

unzip('testZip.zip', list = TRUE)
#               Name Length                Date
# 1 testDir/test.csv   1493 2014-05-14 20:54:00
# 2 testDir/cats.csv    116 2014-05-14 20:54:00
# 3  testDir/txt.txt     32 2014-05-08 09:37:00

注意:来自?zip,关于zip参数。

  

在Windows上,默认依赖于路径中的zip程序(例如来自Rtools的程序)。

答案 1 :(得分:2)

为了避免(a)相对路径的问题(即,zip文件本身包含一个文件夹结构,其中包含要压缩的完整文件夹路径)和(b)for循环(井,样式),可以使用

my_wd<-getwd() # save your current working directory path
dest_path<-"C:/.../folder_with_files_to_be_zipped" 
setwd(dest_path)
files<-list.files(dest_path)
named<-paste0(files,".zip")
mapply(zip,zipfile=named,files=files)
setwd(my_wd) # reset working directory path

与R的内置unzip函数不同,zip需要一个像7-zip(Windows)这样的zip程序或者一个属于Rtools的程序存在于系统路径中。 / p>

答案 2 :(得分:1)

您可以从omegahat repos:

安装
install.packages('Rcompression', repos = "http://www.omegahat.org/R", type = "source")

对于Windows,您需要跳过安装zlib和bzip2并正确链接的环。

在某些情况下可以使用

utils::zip。它有很多问题。一种情况是,在命令提示符下可以使用的字符串的最大长度为8191个字符(某些版本为2047个字符)。如果要压缩目录/文件名称的大量字符的目录,这将导致问题。例如,如果您压缩firefox配置文件目录。另外我发现需要相对于我正在使用相对目录名称的目录发布zip命令。 Rcompression有一个altNames参数来处理这个问题。 话虽如此,我总是遇到让Rcompression在Windows上运行的问题。

答案 3 :(得分:0)

制作

    #Convertir todas las carpetas en .zip
    d <- "C:/Users/Eric/Documents/R/win-library/3.3"
    array <- list.files(d)

    for (i in 1:length(array)){
      name <- paste0(array[i],".zip")

      zip(name, files = paste0(d,paste0("/",array[i])))
    }

答案 4 :(得分:0)

对于仍在寻找它的人们:现在有一个"zip" package并不依赖于外部可执行文件。