Tôi cần tự động hóa R để đọc tệp dữ liệu csv vào tệp zip.Tự động đọc tập tin dạng zip trong R
Ví dụ, tôi sẽ gõ:
read.zip(file = "myfile.zip")
Và trong nội bộ, những gì sẽ được thực hiện là:
- Unzip
myfile.zip
vào một thư mục tạm thời - Đọc file chỉ chứa trên đó sử dụng
read.csv
Nếu có nhiều hơn một tập tin vào tập tin zip, một lỗi được ném.
Vấn đề của tôi là lấy tên của tệp chứa trong tệp zip, được nhúng vào để cung cấp tệp đó làm lệnh read.csv
. Có ai biết làm thế nào để làm điều đó?
CẬP NHẬT
Dưới đây là các chức năng tôi đã viết dựa trên @ Paul trả lời:
read.zip <- function(zipfile, row.names=NULL, dec=".") {
# Create a name for the dir where we'll unzip
zipdir <- tempfile()
# Create the dir using that name
dir.create(zipdir)
# Unzip the file into the dir
unzip(zipfile, exdir=zipdir)
# Get the files into the dir
files <- list.files(zipdir)
# Throw an error if there's more than one
if(length(files)>1) stop("More than one data file inside zip")
# Get the full name of the file
file <- paste(zipdir, files[1], sep="/")
# Read the file
read.csv(file, row.names, dec)
}
Vì tôi sẽ làm việc với các tập tin hơn bên trong tempdir()
, tôi đã tạo ra một thư mục mới bên trong nó, vì vậy tôi không bị lẫn lộn với các tập tin. Tôi hy vọng nó có thể hữu ích!
các bản sao có thể có? tại: http://stackoverflow.com/questions/3053833/using-r-to-download-zipped-data-file-extract-and-import-data; http://stackoverflow.com/questions/7044808/using-r-to-download-gzipped-data-file-extract-and-import-data/7045059#7045059 – aatrujillob
Trên thực tế, liên kết đầu tiên không liên quan, vì sự cố của tôi là không không giải nén tệp, nhưng để lấy tên của các tệp bên trong mã zip. Nhưng có, thứ hai cho thấy lệnh 'list.files', đó là (cho đến nay) mà tôi không biết. –
@jdanielnd: bạn có thể lấy tên tệp trong tệp zip bằng cách sử dụng 'unzip (tệp, danh sách = TRUE)', như tôi đã sử dụng trong câu trả lời của mình. –