从.zip中提取某些文件

时间:2015-09-30 16:08:15

标签: r unzip

有没有办法从.zip归档中有选择地提取名称与模式匹配的文件?

例如,如果我想使用存档中的所有.csv个文件而忽略其他文件。

目前的做法:

zipped_file_names <- unzip('some_archive.zip') # extracts everything, captures file names
csv_nms <-  grep('csv', zipped_file_names, ignore.case=TRUE, value=TRUE)
library('data.table')
comb_tbl <- rbindlist(lapply(csv_nms,  function(x) cbind(fread(x, sep=',', header=TRUE, 
                                                               stringsAsFactors=FALSE), 
                                                         file_nm=x) ), fill=TRUE ) 

我不是只选择要阅读的内容(csv_nms),而是在寻找一种方法来选择首先要提取的内容。

我目前正在使用v3.2.2(Windows)。

1 个答案:

答案 0 :(得分:7)

感谢来自@ user20650的评论。

使用两次unzip来电。首先使用list=TRUE获取文件的$Name。其次是files=,只提取名称与模式匹配的文件。

  zipped_csv_names <- grep('\\.csv$', unzip('some_archive.zip', list=TRUE)$Name, 
                           ignore.case=TRUE, value=TRUE)
  unzip('some_archive.zip', files=zipped_csv_names)
  comb_tbl <- rbindlist(lapply(zipped_csv_names,  
                               function(x) cbind(fread(x, sep=',', header=TRUE,
                                                       stringsAsFactors=FALSE),
                                                 file_nm=x)), fill=TRUE )