R:解压缩大型压缩.csv产生" zip文件已损坏"警告

时间:2017-08-01 20:11:21

标签: r csv unzip

我正在从联合国粮农组织下载一个78MB的zip文件,其中包含2.66GB的csv。我可以使用winzip从文件夹中解压缩下载的文件,但无法使用R中的unzip()解压缩文件:

警告 - 78MB下载!

url <- "http://fenixservices.fao.org/faostat/static/bulkdownloads/FoodBalanceSheets_E_All_Data_(Normalized).zip"
path <- file.path(getwd(),"/zipped_data.zip")
download.file(url, path, mode = "wb")
unzipped_data <- unzip(path)

这会导致警告并且无法解压缩文件:

  

警告信息

     

在解压缩(路径)中:zip文件已损坏

在我看到的?unzip文档中

  

&#34;它确实支持bzip2压缩和&gt; 2GB压缩文件(但不包括zip文件中包含的&gt; = 4GB文件预压缩:像许多解压缩版本一样,它可能会截断这些文件,如果可能的话会在R&C的情况下发出警告)&#34;

这让我相信unzip()应该处理我的文件,但同样的过程已成功下载,解压缩并从FAOstat读取多个其他较小的表。我的csv的大小是否可能是此错误的来源?如果是,那么解决方法是什么?

1 个答案:

答案 0 :(得分:0)

我无法测试我的解决方案,这也取决于您的安装,但希望它能够起作用或者至少指向一个合适的解决方案:

您可以通过命令行this page shows the structure of the call

运行winzip

您还可以使用systemshell(只是system

的包装器)从R运行命令行

要提取的命令行常规结构将是:

winzip32 -e [options] filename[.zip] folder

因此,我们使用此结构和输入路径创建一个字符串,然后我们围绕它创建一个模拟unzip参数zipfileexdir

的函数
unzip_wz <- function(zipfile,exdir){
  dir.create(exdir,recursive = FALSE,showWarnings=FALSE) # I don't know how/if unzip creates folders, you might want to tweak or remove this line altogether
  str1 <- sprintf("winzip32 -e '%s' '%s'",zipfile,exdir)
  shell(str1,wait = TRUE)  # set to FALSE if you want the program to keep running while unzipping, proceed with caution but in some cases that could be an improvement of your current solution
}

您可以尝试使用此功能代替unzip。它假设winzip32已添加到您的系统路径变量中,如果不是,请添加它,或者用exec全名替换它,以便您具有以下内容:

str1 <- sprintf("'C://probably/somewhere/in/program/files/winzip32.exe' -e '%s' '%s'",zipfile,exdir)

PS:使用完整路径!命令行不知道你的工作目录(如果需要,我们可以在我们的函数中实现该功能)。