【问题标题】:UnzIp a WInZip gz file with R to get to cax file使用 R 解压缩 WInZip gz 文件以获取 cax 文件
【发布时间】:2014-11-07 05:39:23
【问题描述】:

我想在我的网络上解压缩一个文件,它是一个“.gz”winzip 文件,里面有一个我想要阅读的 .cax 文件。

当我跑步时

  unzip("/connect/me/test.gz", files = "test.cax",   list = TRUE, overwrite = TRUE,junkpaths = FALSE, exdir = ".", unzip = "internal")

这里出现错误

  Error in unzip("/connect/me/test.gz", files = NULL,  : 
    zip file 'connect/me/test.gz' cannot be opened
####################################### 我也试过这个:
 g<-gzfile("/connect/me/test.gz", open = "", encoding = getOption("encoding"),compression = 6)
 g

这会返回

   description                                     class                                      mode 
 "/connect/me/test.gz"                                  "gzfile"                                           "rb" 
                                 text                                    opened                                      can read 
                               "text"                                  "closed"                                        "yes" 
                            can write 
                                "yes" 
所以任何人都可以帮忙。看起来 gzfile 有潜力,但我如何读取文件?

谢谢。

【问题讨论】:

  • unzip 返回一个不可见的结果,除非list = TRUE。你检查什么了吗? list.files()?
  • 有一个非常相似的问题here
  • @Richard - 我已更新 list = TRUE 并收到错误
  • 好的,然后尝试在文件名的开头添加~,即~/connect/me/test.gz。您可能在错误的目录中
  • @Richard 路径绝对正确。我也试过 untar() 也没有用

标签: r


【解决方案1】:

顺便说一句:*.gz 文件,虽然它可以由 Windows 中的 WinZip 处理,但最好将其描述为 gzipped 文件。 gzip 本身只压缩单个文件,它不会生成多个文件或目录的存档。因此,当您弄清楚如何解压缩它时,您将获得未压缩的原始文件(无论有无 .cax 后缀,技术上都无关紧要)。

gzfile 仅返回一个可供其他函数使用的连接,例如read.csv()readLines()。您看到的输出(带有“描述”等)只是如何在控制台上打印类“连接”的目标。来自help(gzfile)

'file'、'pipe'、'fifo'、'url'、'gzfile'、'bzfile'、'xzfile'、'unz' 并且'socketConnection'返回一个继承的连接对象 来自“连接”类,并具有第一个更具体的类。

这应该与您需要读取数据的任何函数一起使用。例如,如果你有一个 gzip 格式的 CSV,你可以这样做:

dat <- read.csv(gzfile('/path/to/test.csv.gz', header = FALSE))

所以,扩展你的例子:

g <- gzfile("/connect/me/test.gz", open = "",
            encoding = getOption("encoding"), compression = 6)
txt <- readLines(g)
close(g)              # not strictly required but good practice

我猜你有一个不同的函数来读取未压缩的文件。用它代替上面的readLines()

顺便说一句:它正在解压缩它在内存中,这意味着您将找不到未压缩的文件。如果在内存中解压它仍然会导致问题或惊慌,您可以随时在命令行上使用gunzip /connect/to/test.gz 解压它,或者假设您的gz* 命令在您的PATH 中,您可以在R 中使用以下内容:

system2('gunzip', '/connect/to/test.gz')
txt <- readLines('/connect/to/test')    # notice no ".gz"

(压缩文件被解压缩成一个新文件,压缩文件被删除。“完成时删除”行为可以在命令行上使用-k进行更改。请参阅man gunzip了解更多信息,如果这是首选路线。)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 2011-03-18
相关资源
最近更新 更多