【问题标题】:R: unzipping large compressed .csv yields "zip file is corrupt" warningR:解压缩大型压缩 .csv 会产生“zip 文件已损坏”警告
【发布时间】:2017-08-01 20:11:21
【问题描述】:

我正在从联合国粮农组织下载一个 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)

这会导致警告和解压缩文件失败:

警告信息

在 unzip(path) 中:zip 文件已损坏

在我看到的?unzip 文档中

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

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

【问题讨论】:

  • 您可以在 R 中构建一个 shell 命令,在您的文件上调用 winzip,并使用 R 中的 shell 函数执行它。如果您将其包装到函数 unzip2 中,则不会有太大区别
  • 我在其他建议 system 的帖子上看到了这个想法,但我还没有看到一个例子。你能提供一个,或者指出我正确的方向吗?感谢您的帮助!
  • 查看我的回答,请给我一些反馈,以便我改进它,因为它未经测试并且包含一些不确定性。

标签: r csv unzip


【解决方案1】:

我无法测试我的解决方案,这也取决于您的安装,但希望这会奏效或至少为您指出合适的解决方案:

你可以通过命令行运行winzip,this page shows the structure of the call

您还可以使用systemshell 从R 运行命令行(这只是system 的包装器

要提取的命令行一般结构是:

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

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

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:使用完整路径!命令行不知道您的工作目录(如果需要,我们可以在函数中实现该功能)。

【讨论】:

  • 感谢您向我指出 winzip cmd 语法。不过,即使从命令行解压缩我的文件,我也没有成功。最终,使用系统命令可能不是我的解决方案 - 我正在尝试编写一个脚本来重建托管在网络驱动器上的表。它需要从任何安装了 R 的用户机器上运行,因此指向本地安装的 winzip 可能会出现问题,尽管我们组织的大多数机器上的路径可能都是相同的。
  • 也许这有点太明显了,但这可能会奏效! cran.r-project.org/web/packages/zip/index.html
  • warning: zip file is corrupt 之后立即尝试 zip (linux),显示此 * DONE (zip) The downloaded source packages are in ‘/tmp/RtmpDgwPmW/downloaded_packages’ Warning message: closing unused connection 3 (./:617d4dbbd.flac),连接列表是第一个需要的大 zip 文件,因此可能损坏与不清理有关.. .这在使用files = some_character_vec_of_the_files_desired 的情况下。安装 zip 确实解决了这个不太明显的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
相关资源
最近更新 更多