我正在将客户端构建到 RESTful API 上。一些链接让我可以从服务器下载附件(文件),在最好的情况下这些是 .txt。我只提到 RESTful 部分,因为这意味着我必须在每个帖子中发送一些标题和可能的正文 - 标准的 R 'filename'=URL 逻辑将不起作用。
有时人们将许多 txt 文件打包成一个 zip。这些很尴尬,因为我不知道它们包含什么,直到我下载了很多。
目前,我正在解压缩这些文件,压缩文件(添加 .gz 扩展名)并重新上传它们。然后可以对它们进行索引和下载。
我正在使用 Hadley 的可爱 httr 包,但我看不到解压缩 gz 文件的优雅方法。
使用 read.csv 或类似文件时,任何以 gz 结尾的文件都会自动解压缩(方便!)。使用 httr 或 curl 时的等价物是什么?
content(GET("http://glimmer.rstudio.com/alexbbrown/gz/sample.txt.gz"))
[1] 1f 8b 08 08 4e 9e 9b 51 00 03 73 ...
看起来不错,带有正确 header (1f 8b) 的压缩字节流。现在我需要文本内容,所以我尝试使用 memDecompress,它说它应该这样做:
memDecompress(content(GET("http://glimmer.rstudio.com/alexbbrown/gz/sample.txt.gz")),type="gzip")
Error in memDecompress(content(GET("http://glimmer.rstudio.com/alexbbrown/gz/sample.txt.gz")), :
internal error -3 in memDecompress(2)
这里的正确解决方案是什么?
另外,有没有办法让 R 在不下载所有文件的情况下提取远程 .zip 文件的索引?
最佳答案
以下工作,但似乎有点令人费解:
> scan(gzcon(rawConnection(content(GET("http://glimmer.rstudio.com/alexbbrown/gz/sample.txt.gz")))),"",,,"\n")
Read 1 item
[1] "These are not the droids you are looking for"
关于R、GET 和 GZ 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16675188/