【问题标题】:Read specific file from tar.gz in R从 R 中的 tar.gz 读取特定文件
【发布时间】:2018-01-12 03:45:47
【问题描述】:

我有一个大的 tar.gz 文件 (>2GB),我想从中读取 R 中的特定 .dat 文件不解压缩原始 tar.gz 文件。

我尝试如下关注this post

p35_data_path <- "~/P35_fullset.tar.gz" 
file.exists(p35_data_path) #TRUE

# Try to readin foldera/class1/mydata.dat from the zip file
mydata <- read.table(unz(p35_data_path
                       , "foldera/class1/mydata.dat"))

当我运行上面的代码时,我得到一个read.table 错误

Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
  cannot open zip file '~/P35_fullset.tar.gz'

"~/P35_fullset.tar.gz" 文件存在。而且里面的具体文件肯定存在foldera/class1/mydata.dat

有人可以帮忙解决这个问题吗?

【问题讨论】:

  • 您的意思是“不将原始 tar.gz 解压缩到基于 ssd/spindle 的存储”,因为它必须在内存中解压缩。另请注意,unz() 仅适用于 .zip 文件。不知道你从哪里得到它处理.tar.gz 的印象。查看archive 包。
  • @hrbrmstr。谢谢 - 我基本上不想将所有内容解压到磁盘。我可以将特定文件解压到磁盘,但是对于单个文件来说这花费了太长时间,所以我认为可能有一种方法可以通过单独访问它们来完成。我会检查archive 包并用查询报告
  • 这对我有用(感谢@hrbrmstr)p35_data_path &lt;- "~/P35_fullset.tar.gz" # Try to readin foldera/class1/mydata.dat from the zip file x &lt;- archive::archive_read(archive = p35_data_path , file = "foldera/class1/mydata.dat") mydata &lt;- readr::read_csv(x)

标签: r read.table


【解决方案1】:

**da&lt;-untar(Tarfile, files = NULL, list = TRUE, exdir = ".",compressed = "gzip")** ### 用于列出 TAR 下的文件

**da&lt;-as.data.table(da)**###将列出的文件保存为数据表

然后像我一样使用你自己的过滤技术过滤文件并保存在“名称”中

**g&lt;-c(da$Name)**###然后列出名字

**untar(Tarfile, files = g, list = FALSE, exdir = "exportRQA",compressed = "gzip")**###这终于是解压具体文件的命令了。

【讨论】:

    【解决方案2】:

    您应该能够使用 base R 的 untar() 解压缩存档:

    p35_data_path <- "~/P35_fullset.tar.gz" 
    file.exists(p35_data_path) #TRUE
    
    # Try to readin foldera/class1/mydata.dat from the .tar.gz file
    untar(p35_data_path, "foldera/class1/mydata.dat")  # this extracts the file from archive
    mydata <- read.table("foldera/class1/mydata.dat")  # so you can read it
    

    文件在文件夹中提取,但是,您可以指定提取位置。请参阅documentation 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2016-09-25
      • 2018-01-09
      • 1970-01-01
      相关资源
      最近更新 更多