2012-09-17 43 views
44

Tôi có một file zip rất lớn và tôi đang cố gắng để đọc nó vào R mà không cần giải nén nó như vậy:R Reading trong một tệp dữ liệu zip mà không cần giải nén nó

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

bài này có thể giúp bạn: http://stackoverflow.com/questions/3053833/using-r-to-download-zipped-data-file-extract-and-import-data – Sam

+0

Có tôi đã làm tôi thẩm định và tìm kiếm trước khi tôi hỏi câu hỏi này, hơi khác với câu hỏi đó là tôi đang cố gắng đọc từ hệ thống tệp cục bộ của mình và không thông qua url. – laiboonh

+0

Bạn đã từng giải quyết vấn đề này chưa? –

Trả lời

30

Nếu file zip của bạn được gọi Sales.zip và chứa chỉ một tập tin gọi Sales.dat, tôi nghĩ rằng bạn chỉ có thể làm như sau (giả sử các tập tin trong thư mục làm việc của bạn):

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

Có cách nào để tìm tên tệp bên trong tệp "Sales.zip" mà không trích xuất tệp đó không? –

+0

@AllenWang có nhưng một người phải sử dụng hàm 'unzip' thay vào đó: 'unzip (" Sales.zip ", list = TRUE)' – plannapus

1

phiên bản nào của R bạn đang sử dụng? Nó có thể là giá trị cố gắng phát hành ổn định mới nhất (từ dự án, không phải từ một phân phối, có thể được phía sau).

Tôi đã thấy lỗi này xảy ra trong bản phát hành cũ hơn nhưng không phải lỗi mới nhất, khi chạy các lệnh giống hệt nhau bằng cách sử dụng unz trong cả hai.

7

Không cần phải sử dụng unz, như bây giờ read.table có thể xử lý các tập tin nén trực tiếp:

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

Xem this post

0

Nếu bạn đã zcat được cài đặt trên hệ thống của bạn (đó là trường hợp cho linux , macos và cygwin) bạn cũng có thể sử dụng:

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

Giải pháp này cũng có lợi thế là không có tệp tạm thời nào được tạo.

2

Các phương pháp của gói readr cũng hỗ trợ các tệp nén nếu hậu tố tệp cho biết tính chất của tệp, đó là các tệp kết thúc bằng .gz, .bz2, .xz hoặc .zip sẽ tự động được giải nén.

require(readr) 
myData <- read_csv("foo.txt.gz") 
Các vấn đề liên quan