我正在从联合国粮农组织下载一个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的大小是否可能是此错误的来源?如果是,那么解决方法是什么?
答案 0 :(得分:0)
我无法测试我的解决方案,这也取决于您的安装,但希望它能够起作用或者至少指向一个合适的解决方案:
您可以通过命令行this page shows the structure of the call
运行winzip您还可以使用system
或shell
(只是system
要提取的命令行常规结构将是:
winzip32 -e [options] filename[.zip] folder
因此,我们使用此结构和输入路径创建一个字符串,然后我们围绕它创建一个模拟unzip
参数zipfile
和exdir
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:使用完整路径!命令行不知道你的工作目录(如果需要,我们可以在我们的函数中实现该功能)。