9

我正在尝试使用 R 下载和提取 zip 文件。每当我这样做时,我都会收到错误消息

解压缩错误(temp,list = TRUE):'exdir' 不存在

我正在使用基于 Stack Overflow 问题的代码Using R to download zipped data file, extract, and import data

举一个简化的例子:

# Create a temporary file
temp <- tempfile()

# Download ZIP archive into temporary file
download.file("http://cran.r-project.org/bin/windows/contrib/r-release/ggmap_2.2.zip",temp)

# ZIP is downloaded successfully:

# trying URL 'http://cran.r-project.org/bin/windows/contrib/r-release/ggmap_2.2.zip'
# Content type 'application/zip' length 4533970 bytes (4.3 Mb)
# opened URL
# downloaded 4.3 Mb

# Try to do something with the downloaded file
unzip(temp,list=TRUE)

# Error in unzip(temp, list = TRUE) : 'exdir' does not exist

到目前为止我已经尝试过:

  • 手动访问临时文件并使用 7zip 解压缩:可以做到这一点没问题,文件在那里并且可以访问。
  • 将临时目录更改为 c:\temp。同样,该文件已成功下载,我可以访问它并使用 7zip 解压缩它,但是 R 在尝试访问它时会抛出 exdir 错误消息。

R 版本 2.15.2

R-Studio 版本 0.97.306

编辑:如果我使用unz而不是unzip ,则代码有效,但我无法弄清楚为什么一个有效而另一个无效。来自 CRAN 的指导:

  • unz 读取(仅)zip 文件中的单个文件...
  • unzip 从 zip 存档中提取文件或列出文件
4

4 回答 4

13

在 Windows 设置中:当我将 exdir 指定为路径时出现此错误。对我来说,解决方案是删除路径名中的尾随 / 或 \\。

这是一个示例,如果它不存在,它确实创建了新文件夹

locFile <- pathOfMyZipFile
outPath <- "Y:/Folders/MyFolder"
# OR
outPath <- "Y:\\Folders\\MyFolder"

unzip(locFile, exdir=outPath)
于 2016-02-05T18:28:32.030 回答
4

这可能以另一种方式表现出来,并且文档没有说明原因。您的 exdir 不能以“/”结尾,它必须只是目标文件夹的名称。

例如,这因 'exdir' 不存在而失败:

unzip(temp, overwrite = F, exdir = "data_raw/system-data/")

这很好用:

unzip(temp, overwrite = F, exdir = "data_raw/system-data")

大概当 unzip 在 exdir 路径的末尾看到“/”时,它一直在寻找;而省略“/”则表示 unzip “你找到了,在此处解压缩”。

于 2016-02-06T01:15:31.487 回答
2

晚了几年,但我在尝试使用unzip(). 这似乎是一个错误,因为unzip如果指定了 state的手册页,exdir它将被创建:

exdir 将文件解压到的目录(相当于 unzip -d)。如有必要,将创建它。

我一直在使用的解决方法是手动创建必要的目录:

dir.create("directory")
unzip("file-to-unzip.zip", exdir = "directory/")

痛苦,但它似乎有效,至少对我来说。

于 2015-08-17T09:42:05.630 回答
0

我在 Windows 7 机器上使用 R3.2.1。

我发现解决此问题的方法需要几个步骤,但它对我有用:

  1. 创建一个向量,其中包含您从中下载文件的 url 的名称,例如

file_url <- " http://your.file.com/file_name.zip "

  1. 使用 download.file 指定下载文件的 url(使用新创建的向量),后跟压缩文件的文件名(应该是 url 名称的最后一部分)。它将被保存在您的工作目录*中,例如

下载.file(file_url, "file_name.zip")

*如果您不确定您的工作目录,您可以使用 getwd() 来检查它。如果要更改工作目录,可以使用 setwd("C:users/username/...") 将其设置为您想要的。

  1. 使用“解压缩”将文件解压缩到您的工作目录中,使用您将使用 exdir 设置的名称,例如

unzip("file_name.zip", exdir = "file_name")

  1. 要检查您的工作,您可以使用 list.files,例如

list.files("file_name")

希望这可以帮助!

于 2015-08-17T15:32:38.803 回答