我使用 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'
欢迎任何评论!
答案 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()
更快。