Подтвердить что ты не робот

R Чтение в файле данных zip без его разархивирования

У меня очень большой 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'
4b9b3361

Ответ 1

Если ваш zip файл называется Sales.zip и содержит только файл с именем Sales.dat, я думаю, вы можете просто сделать следующее (предполагая, что файл находится в вашем рабочем каталоге):

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

Ответ 2

Не нужно использовать unz, так как теперь read.table может обрабатывать сжатый файл напрямую:

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

См. этот пост

Ответ 3

Какую версию R вы используете? Возможно, стоит попробовать последний стабильный выпуск (из проекта, а не из дистрибутива, который может быть позади).

Я видел, что эта ошибка встречается в более старых версиях, но не самая последняя, ​​при запуске одинаковых команд с использованием unz в обоих.

Ответ 4

Если у вас установлена ​​zcat в вашей системе (это относится к linux, macos и cygwin), вы также можете использовать:

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

Это решение также имеет то преимущество, что временные файлы не создаются.

Ответ 5

Методы пакета readr также поддерживают сжатые файлы, если суффикс файла указывает природу файла, то есть файлы, заканчивающиеся в .gz,.bz2,.xz или .zip будет автоматически несжатым.

require(readr)
myData <- read_csv("foo.txt.gz")