【问题标题】:How to programmatically extract / unzip a .7z (7-zip) file with R如何使用 R 以编程方式提取/解压缩 .7z (7-zip) 文件
【发布时间】:2013-04-12 08:23:07
【问题描述】:

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

我的电脑上同时安装了 WinRAR 和 7-zip,我可以使用任何一个程序轻松地单独打开这些文件。

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

我对压缩一无所知,但如果它有什么不同的话:这些文件中的每一个都只包含一个文件,而且它只是一个文本文件。 p>

我非常喜欢不需要用户安装其他软件(如 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

谢谢!!! :)

【问题讨论】:

  • 最好的解决方案是使用标准连接 API 或通过磁盘上的临时文件读取和写入 7z 文件的包。但我认为该软件包不存在。
  • 同意。现在我正在请求巴西人口普查的人们遵循@dirk 的建议并以标准格式重新发布文件:) 谢谢哈德利!
  • 您展示的示例是 pkzip 压缩文件而不是 p7 压缩文件。所以你的标准unzip() 可以工作。一个相关的问题是stackoverflow.com/questions/31146263/sys-glob-within-unzip

标签: r zip unzip 7zip rar


【解决方案1】:

这可以通过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

【讨论】:

【解决方案2】:

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

system('7z e -o &lt;output_dir&gt; &lt;archive_name&gt;')

【讨论】:

  • 完全没有满足“我强烈希望使用不需要用户安装额外软件的解决方案”的要求。
  • @DirkEddelbuettel 但没有手动完成所有操作,这是唯一可行的方法,对吧? :(
  • @DirkEddelbuettel ..从你和哈德利所说的来看,这是 only 的答案。 :(我为什么要删除线程?其他人也可能会受益于知道如果不安装外部软件就不可能完成这项任务
  • 注意命令是system('7z e -o&lt;output_dir&gt; &lt;archive_name&gt;')。在 -o 和目录之间有空格会失败!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多