如何使用R以编程方式提取/解压缩.7z(7-zip)文件

时间:2013-04-19 02:22:35

标签: r zip unzip 7zip rar

我正在尝试自动提取使用7-zip压缩的大量文件。我需要自动化这个过程,因为a)我想要解锁多年的数据; b)我想与他人分享我的代码并防止他们手动重复这个过程。

我的计算机上安装了WinRAR和7-zip,我可以使用任一程序轻松打开这些文件。

我查看了unzip untarunz命令,但我不相信他们中的任何一个都能满足我的要求。

我对压缩一无所知,但如果它有任何区别:这些文件中的每一个只包含一个文件,而只是一个文本文件

我非常喜欢不需要用户安装其他软件(如WinRAR或7-Zip)并使用shell执行命令的解决方案,尽管我承认这个任务可能只有R和CRAN包。我实际上相信在这些文件上运行shell.exec,其他参数可能适用于安装了WinRAR的计算机,但同样,我想尽可能避免安装。 :)

运行下面的代码将加载我想要提取的文件 - files.data中的.7z文件是需要解锁的。

# 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 个答案:

答案 0 :(得分:18)

可以使用archive package完成此操作。

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

答案 1 :(得分:14)

如果您的路径中有7z个可执行文件,则可以使用system命令

system('7z e -o <output_dir> <archive_name>')