как программно извлечь или распаковать a.7z (7-zip) файл с R
Я пытаюсь автоматизировать извлечение ряда файлов, сжатых с помощью 7-zip. Мне нужно автоматизировать этот процесс, потому что а) есть много лет данных, которые я хотел бы разблокировать и б) я хотел бы поделиться своим кодом с другими и предотвратить их повторение процесса вручную.
у меня на компьютере установлены WinRAR и 7-zip, и я могу легко открывать эти файлы с помощью любой программы.
Я посмотрел на unzip
untar
и unz
приказы, но я не верю, что кто-то из них делает то, что мне нужно.
Я ничего не знаю о сжатии, но если это имеет значение: каждый из этих файлов содержит только один и просто текстовый файл.
Я бы предпочел решение, которое не требует от пользователя установки дополнительного программного обеспечения (например, WinRAR или 7-Zip) и выполнения команды с shell
, хотя я признаю, что эта задача может быть невозможна только с R и CRAN пакеты. Я действительно верю в бег shell.exec
на этих файлах с дополнительными параметрами может работать на компьютерах с установленным WinRAR, но опять же, я хотел бы избежать этой установки, если это возможно. :)
запуск кода ниже загрузит файлы, которые я пытаюсь извлечь -- the .7z файлы в files.data
это то, что нужно разблокировать.
# create a temporary file and temporary directory, download the file, extract the file to the temporary directory
tf <- tempfile() ; td <- tempdir()
file.path <- "ftp://ftp.ibge.gov.br/Orcamentos_Familiares/Pesquisa_de_Orcamentos_Familiares_2008_2009/Microdados/Dados.zip"
download.file( file.path , tf , mode = "wb" )
files.data <- unzip( tf , exdir = td )
# how do i unzip ANY of these .7z files?
files.data
спасибо!!! :)
2 ответов
Если у вас 7z
исполняемый файл в вашем пути, вы можете просто использовать system
команда
system('7z e -o <output_dir> <archive_name>')
Это можно сделать с помощью тега archive
пакета.
library(archive)
tf <- tempfile() ; td <- tempdir()
file.path <- "ftp://ftp.ibge.gov.br/Orcamentos_Familiares/Pesquisa_de_Orcamentos_Familiares_2008_2009/Microdados/Dados.zip"
download.file( file.path , tf , mode = "wb" )
archive(tf)