как программно извлечь или распаковать 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)

см.https://github.com/jimhester/archive