使用R从LZMA存档中提取文件

时间:2017-03-10 13:05:04

标签: r extract tar lzma xz

我正在尝试使用R从包含JSON文件的API下载的LZMA存档中提取文件。在我的计算机上,我可以在Windows资源管理器中手动提取文件,没有任何问题。

此处列出了我的代码(已移除API详细信息):

tempFile <- tempfile()
destDir <- "extracted-files"
if (!dir.exists(destDir)) dir.create(destDir)

download.file("api_url.tar.xz", destfile = tempFile)
untar(tempFile, exdir = destDir)

当我尝试解压缩文件时,收到以下错误消息:

/usr/bin/tar: This does not look like a tar archive
/usr/bin/tar: Skipping to next header
/usr/bin/tar: Exiting with failure status due to previous errors
Warning messages:
1: running command 'tar.exe -xf "C:\Users\XXX\AppData\Local\Temp\RtmpMncPWp\file2eec75e23a15" -C "extracted-files"' had status 2 
2: In untar(tempFile, exdir = destDir) :
  ‘tar.exe -xf "C:\Users\XXX\AppData\Local\Temp\RtmpMncPWp\file2eec75e23a15" -C "extracted-files"’ returned error code 2

我使用的是Windows 10和R版本3.3.1(2016-06-21)。

2 个答案:

答案 0 :(得分:0)

解决:

虽然它似乎在Mac上完美运行,但要在Windows上工作,您需要打开压缩的.xz文件连接以便以二进制模式读取,然后再将其传递给untar():

download.file(url, tmp)
zz <- xzfile(tmp, open = "rb")
untar(zz, exdir = destDir)

答案 1 :(得分:0)

另一种更简单的解决方案是为download.file()指定'mode'参数,如下所示:

download.fileurl, destfile = tmp, mode = "wb")