通过.gz列表解压缩

时间:2016-09-21 01:27:06

标签: r unzip

在R中,我想从此站点的每个目录下载并解压缩所有.gz文件:ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI/

我遇到了这个困难:我将来自这里的所有〜60个.gzs ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI/放在R的列表中,并且想要将每个都解压缩到一个目录中,但是对于我的生活来说无法形象出来。

R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"

> typeof(list_gz)
[1] "list"
> head(list_gz)
[[1]]
[1] "ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI//2014/GPCC_DI_201401.nc.gz"

[[2]]
[1] "ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI//2014/GPCC_DI_201402.nc.gz"

> sapply(list_gz, function(i) getURL(untar(i)))
gzip: can't stat: ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI//2014/GPCC_DI_201401.nc.gz (ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI//2014/GPCC_DI_201401.nc.gz.gz): No such file or directory
 Show Traceback

 Rerun with Debug
 Error in function (type, msg, asError = TRUE)  : 
  Failed to connect to 0 port 80: Connection refused 

我在这里不太确定。也许我应该重做我的代码的前半部分并下载~60 .gzs而不是尝试下载并以列表/ sapply方式解压缩它们。谢谢!

1 个答案:

答案 0 :(得分:1)

我可能会下载然后解压缩。

确保设置工作目录。

library(curl)
library(stringr)

list_gz = list("ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI//2014/GPCC_DI_201401.nc.gz",
               "ftp://ftp.dwd.de/pub/data/gpcc/GPCC_DI//2014/GPCC_DI_201402.nc.gz")

sapply(list_gz, function(x) {
  # this will dl the file and save with same name (name after last '/')
  file_name = sub(".*//(.*)/", "", x)
  year = c(str_match(file_name, "\\d\\d\\d\\d"))
  if(!dir.exists(year)) dir.create(year)
  curl_download(x, destfile = paste0(year, "/", file_name)) 
  # insert code for unzipping here - my computer wouldnt let me untar the files
  # untar(paste0(year, "/", file_name))
})