Potrzebuję zautomatyzować R, aby odczytać plik danych CSV, który jest w pliku zip.Automatyczne odczytywanie plików zip w R
Na przykład, chciałbym wpisać:
read.zip(file = "myfile.zip")
i wewnętrznie, co byłoby wykonane jest:
- Rozpakuj
myfile.zip
do folderu tymczasowego - odczytać tylko pliki znajdujące się na nim za pomocą
read.csv
Jeśli jest więcej niż jeden plik do pliku zip, zgłaszany jest błąd.
Mój problem polega na tym, aby uzyskać nazwę pliku zawartego w pliku zip, zgodnie z zamówieniem, aby uzyskać polecenie read.csv
. Czy ktoś wie, jak to zrobić?
UPDATE
Oto funkcja napisałem na podstawie @Paul odpowiedź:
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)
}
Ponieważ będziemy pracować z większą liczbą plików wewnątrz tempdir()
, stworzyłem nową dir wewnątrz niego, więc nie mylę się z plikami. Mam nadzieję, że może się przydać!
możliwe duplikaty? pod adresem: 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
Właściwie pierwszy link, z którym nie jest związany, ponieważ mój problem nie był 't rozpakowanie pliku, ale aby uzyskać nazwę plików wewnątrz zip. Ale tak, drugi pokazuje polecenie 'list.files', które było (jak dotąd) nieznane przeze mnie. –
@jdanielnd: możesz dostać się do nazw plików w pliku zip używając 'unzip (file, list = TRUE)', jak użyłem w mojej odpowiedzi. –