R读取zip数据文件而不解压缩

时间:2012-09-17 14:01:57

标签: r

我有一个非常大的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'

7 个答案:

答案 0 :(得分:36)

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

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

答案 1 :(得分:17)

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

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

请参阅this post

答案 2 :(得分:7)

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

Future<CAP#1> cannot be converted to Future<Void>

答案 3 :(得分:3)

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

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

在不提取文件的情况下检查文件名。可行

unzip("sales.zip", list = TRUE)

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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更快

答案 6 :(得分:0)

在此表达式中,您输了一个点

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

应该是:

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