78

我有一个非常大的 zip 文件,我正在尝试将其读入 R 而不像这样解压缩:

temp <- tempfile("Sales", fileext=c("zip"))
data <- read.table(unz(temp, "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")

Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
  cannot open zip file 'C:\Users\xxx\AppData\Local\Temp\RtmpyAM9jH\Sales13041760345azip'
4

7 回答 7

56

如果您的 zip 文件被调用Sales.zip并且仅包含一个名为 的文件Sales.dat,我认为您可以简单地执行以下操作(假设该文件位于您的工作目录中):

data <- read.table(unz("Sales.zip", "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
于 2012-10-18T08:59:22.260 回答
21

无需使用 unz,因为现在 read.table 可以直接处理压缩文件:

data <- read.table("Sales.zip", nrows=10, header=T, quote="\"", sep=",")

看到这个帖子

于 2016-03-16T21:11:15.187 回答
17

readr如果文件后缀表明文件的性质,即以 .gz、.bz2、.xz 或 .zip 结尾的文件将自动解压缩,则该软件包的方法也支持压缩文件。

require(readr)
myData <- read_csv("foo.txt.gz")
于 2017-09-15T11:38:00.677 回答
6

如果文件是 sales.csv,这应该可以正常工作。

data <- readr::read_csv(unzip("Sales.zip", "Sales.csv"))

在不提取文件的情况下检查文件名。这有效

unzip("sales.zip", list = TRUE)
于 2020-05-24T12:53:26.090 回答
2

在这个表达式中你丢失了一个点

temp <- tempfile("Sales", fileext=c("zip"))

它应该是:

temp <- tempfile("Sales", fileext=c(".zip"))
于 2018-08-09T00:03:04.417 回答
2

如果您的系统上安装了 zcat(linux、macos 和 cygwin 就是这种情况),您还可以使用:

zipfile<-"test.zip"
myData <- read.delim(pipe(paste("zcat", zipfile)))

此解决方案还具有不创建临时文件的优点。

于 2017-09-15T11:32:34.747 回答
1

gzfile 函数与 read_csv 和 read.table 一起可以读取压缩文件。

library(readr)
df = read_csv(gzfile("file.csv.gz"))

library(data.table)
df = read.table(gzfile("file.csv.gz"))

即使不使用 gzfile 函数,readr 包中的 read_csv 也可以读取压缩文件。

library(readr)  
df = read_csv("file.csv.gz")

推荐使用 read_csv,因为它比 read.table 快

于 2018-07-06T02:43:58.220 回答