Ich habe eine sehr große Zip-Datei und versuche, sie in R einzulesen, ohne sie wie folgt zu entpacken:
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'
unz
beiden ausgeführt werden.Antworten:
Wenn Ihre Zip-Datei aufgerufen wird
Sales.zip
und nur eine aufgerufene Datei enthältSales.dat
, können Sie meiner Meinung nach einfach Folgendes tun (vorausgesetzt, die Datei befindet sich in Ihrem Arbeitsverzeichnis):data <- read.table(unz("Sales.zip", "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
quelle
unzip
stattdessen Funktion verwenden:unzip("Sales.zip", list=TRUE)
readLines(unz("test.zip","file.txt"))
irgendeinem Grund wird die letzte Zeile nicht gelesen. Irgendeine Idee, wie ich das beheben kann?Unz muss nicht verwendet werden, da read.table jetzt die komprimierte Datei direkt verarbeiten kann:
data <- read.table("Sales.zip", nrows=10, header=T, quote="\"", sep=",")
Siehe diesen Beitrag
quelle
Die Methoden des
readr
Pakets unterstützen auch komprimierte Dateien, wenn das Dateisuffix die Art der Datei angibt, dh Dateien, die mit .gz, .bz2, .xz oder .zip enden, werden automatisch dekomprimiert.require(readr) myData <- read_csv("foo.txt.gz")
quelle
unzip
und dann mit extrahiertreadr
. Vielen Dank, dass Sie meinen Code effizienter gemacht und die Ausführungszeit verkürzt haben!Dies sollte gut funktionieren, wenn die Datei sales.csv ist.
data <- readr::read_csv(unzip("Sales.zip", "Sales.csv"))
So überprüfen Sie den Dateinamen, ohne die Datei zu extrahieren. Das funktioniert
unzip("sales.zip", list = TRUE)
quelle
Wenn Sie zcat auf Ihrem System installiert haben (was bei Linux, Macos und Cygwin der Fall ist), können Sie auch Folgendes verwenden:
zipfile<-"test.zip" myData <- read.delim(pipe(paste("zcat", zipfile)))
Diese Lösung hat auch den Vorteil, dass keine temporären Dateien erstellt werden.
quelle
In diesem Ausdruck haben Sie einen Punkt verloren
temp <- tempfile("Sales", fileext=c("zip"))
Es sollte sein:
temp <- tempfile("Sales", fileext=c(".zip"))
quelle
Die Funktion gzfile kann zusammen mit read_csv und read.table komprimierte Dateien lesen.
library(readr) df = read_csv(gzfile("file.csv.gz")) library(data.table) df = read.table(gzfile("file.csv.gz"))
read_csv aus dem readr-Paket kann komprimierte Dateien auch ohne Verwendung der Funktion gzfile lesen.
library(readr) df = read_csv("file.csv.gz")
read_csv wird empfohlen, da es schneller als read.table ist
quelle