Мне нужно автоматизировать R для чтения файла данных csv, который находится в zip-файле.
Например, я бы набрал:
read.zip(file = "myfile.zip")
И внутренне, что бы было сделано, это:
- Распаковать
myfile.zip
во временную папку
- Прочитать единственный файл, содержащийся в нем, используя
read.csv
Если в zip-файле содержится более одного файла, выдается ошибка.
Моя проблема заключается в том, чтобы получить имя файла, содержащегося в zip-файле, в том порядке, в котором он указан, для выполнения команды read.csv
. Кто-нибудь знает, как это сделать?
UPDATE
Вот функция, которую я написал на основе ответа @Paul:
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)
}
Так как я буду работать с большим количеством файлов внутри tempdir()
, я создал новый каталог внутри него, так что я не путаюсь с файлами. Я надеюсь, что это может быть полезно!