2012-09-17 14 views
44

Mam bardzo duży plik zip i staram się ją przeczytać w R bez rozpakowywania go tak:R Reading w pliku danych ZIP bez rozpakowywania go

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' 
+0

Ten post może pomóc: http://stackoverflow.com/questions/3053833/using-r-to-download-zipped-data-file-extract-and-import-data – Sam

+0

Tak odbyłem due diligence i przeszukane zanim zadałem to pytanie, nieco inne od tego pytania próbuję odczytać z mojego lokalnego systemu plików, a nie poprzez URL. – laiboonh

+0

Czy kiedykolwiek rozwiązałeś ten problem? –

Odpowiedz

30

Jeśli plik zip nazywa Sales.zip i zawiera tylko plik o nazwie Sales.dat, myślę, że można po prostu wykonaj następujące czynności (zakładając, że plik znajduje się w katalogu roboczym):

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

Czy istnieje sposób na znalezienie nazw plików w pliku "Sales.zip" bez jego wyodrębniania? –

+0

@AllenWang tak, ale trzeba użyć funkcji 'unzip' zamiast:' unzip ("Sales.zip", list = TRUE) ' – plannapus

1

Jaka wersja R używasz? Być może warto wypróbować najnowsze stabilne wydanie (z projektu, a nie z dystrybucji, która może być z tyłu).

Widziałem ten błąd występujący w starszych wersjach, ale nie najnowszy, podczas uruchamiania identycznych poleceń przy użyciu unz w obu.

7

Nie ma potrzeby korzystania UNZ, jak teraz read.table może obsługiwać spakowany plik bezpośrednio:

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

Zobacz this post

0

Jeśli zcat zainstalowane w systemie (co ma miejsce w przypadku systemu Linux , macos i cygwin) można również użyć:

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

To rozwiązanie ma tę zaletę, że nie są tworzone żadne pliki tymczasowe.

2

Metody z pakietu również obsługują pliki skompresowane, jeśli przyrostek pliku wskazuje na naturę pliku, czyli pliki kończące się na .gz, .bz2, .xz lub .zip zostaną automatycznie zdekompresowane.

require(readr) 
myData <- read_csv("foo.txt.gz") 
Powiązane problemy