检查存档中文件的存在(zip)

时间:2015-01-31 17:42:28

标签: r

我使用 unz 从档案中的文件中提取数据。这实际上工作得很好但不幸的是我有很多zip文件,需要检查存档中是否存在特定文件。我无法通过如果存在或其他方式获得可行的解决方案。

有人知道如何检查存档文件是否存在之前提取整个存档?

示例:

read.table(unz(D:/Data/Test.zip, "data.csv"), sep = ";")[-1,]

如果data.csv存在,则效果很好但如果档案在档案Test.zip中不可用则会出错。

Error in open.connection(file, "rt") : cannot open the connection  
In addition: Warning message:
In open.connection(file, "rt") :  
  cannot locate file 'data.csv' in zip file 'D:/Data/Test.zip'

欢迎任何评论!

1 个答案:

答案 0 :(得分:7)

您可以使用unzip(file, list = TRUE)$Name获取zip文件的名称,而无需解压缩。然后,您可以检查所需文件是否在列表中。

## character vector of all file names in the zip
fileNames <- unzip("D:/Data/Test.zip", list = TRUE)$Name

## check if any of those are 'data.csv' (or others)
check <- basename(fileNames) %in% "data.csv"

## extract only the matching files
if(any(check)) {
    unzip("D:/Data/Test.zip", files = fileNames[check], junkpaths = TRUE)
}

如果只有一个匹配的文件名,您可以放置​​另一个if()语句来运行unz(),因为它比在单个文件上运行unzip()更快。