R:可能截断 >= 4GB 文件

标签 r unzip

我有一个 370MB 的 zip 文件,内容是一个 4.2GB 的 csv 文件。

我做了:

unzip("year2015.zip", exdir = "csv_folder")

我收到了这条消息:
1: In unzip("year2015.zip", exdir = "csv_folder") :
  possible truncation of >= 4GB file

你以前有过这种经历吗?你是怎么解决的?

最佳答案

我同意@Sixiang.Hu 的回答,R 的 unzip() 不能可靠地处理大于 4GB 的文件。

你是怎么解决的? :我已经尝试了一些不同的技巧,根据我的经验,使用 R 内置函数的任何结果(几乎)总是在实际结束之前错误地识别文件结束(EOF)标记文件。

我在每晚处理的一组文件中处理这个问题,为了始终如一地以自动化方式处理它,我将下面的函数写入 包装 UNIX 解压。 这基本上就是您对 system(unzip()) 所做的事情,但在其行为上为您提供了更大的灵活性,并允许您更系统地检查错误。

decompress_file <- function(directory, file, .file_cache = FALSE) {

    if (.file_cache == TRUE) {
       print("decompression skipped")
    } else {

      # Set working directory for decompression
      # simplifies unzip directory location behavior
      wd <- getwd()
      setwd(directory)

      # Run decompression
      decompression <-
        system2("unzip",
                args = c("-o", # include override flag
                         file),
                stdout = TRUE)

      # uncomment to delete archive once decompressed
      # file.remove(file) 

      # Reset working directory
      setwd(wd); rm(wd)

      # Test for success criteria
      # change the search depending on 
      # your implementation
      if (grepl("Warning message", tail(decompression, 1))) {
        print(decompression)
      }
    }
}    

笔记:

该函数做了一些我喜欢和推荐的事情:
  • 用途 system2超过系统因为 the documentation说“system2 是一个比系统更便携、更灵活的界面”
  • 分隔 directoryfile参数,并将工作目录移动到 directory争论;根据您的系统,解压缩(或您选择的解压缩工具)对于在工作目录外解压缩文件非常挑剔
  • 它不是纯粹的,但重置工作目录是朝着具有更少副作用的功能迈出的重要一步
  • 从技术上讲,您可以在没有这个的情况下做到这一点,但根据我的经验,使函数变得更加冗长比生成文件路径和记住解压缩 CLI 标志更容易
  • 我将它设置为使用 -o 标志在重新运行时自动覆盖,但您可以提供任意数量的参数
  • 包括 .file_cache允许您跳过解压缩的参数
  • 如果您正在测试在解压文件上运行的进程,这会派上用场,因为 4GB 以上的文件往往需要一些时间来解压
  • 在这个例子中被注释掉了,但是如果你知道解压后你不需要存档,你可以内联删除它
  • system2 命令将标准输出重定向到解压缩,一个字符向量
  • if + grepl最后检查在标准输出中查找警告,如果找到表达式
  • 则打印标准输出

    关于R:可能截断 >= 4GB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42740206/

    相关文章:

    r - Autoloads 环境有什么作用?

    mysql - 检测到被阻止的 DLL : MySQL because of No-Installation Download

    objective-c - 在 Objective-C 中解压多存档文件

    r - 如何使用 knit 和 pandoc 在 R Markdown 中包含 DT 数据表的 js 依赖项

    r - 在 Azure 机器学习的 R 脚本中访问 Blob 存储中的文件?

    r - 尝试调整R中Apriori算法的外观

    r - 找不到函数 colMedians

    gradle - 使用工件名称解压缩 gradle 依赖项

    android - 打开失败 : EBUSY (Device or resource busy)

    linux - 当行顺序很重要时解压 .gz 文件