检查存档中的文件是否存在(zip)
问题描述:
我正在使用unz从档案中的文件提取数据。这实际上工作得很好,但不幸的是我有很多zip文件,需要检查存档中特定文件的存在。如果存在或其他情况,我无法设法通过获得工作解决方案。检查存档中的文件是否存在(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'
欢迎任何评论!
答
您可以使用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()
更快。
+1
感谢您对先前评论的扩展代码。这工作得很好!我想我不需要另一个if(),因为zip文件中的名称是唯一的。所以我可以直接在档案中运行unz(),如果文件可用,这似乎很快。再次感谢! – kukuk1de 2015-01-31 19:01:39
你可以得到zip文件的列表,而不需要用'unzip(file.zip,list = TRUE)'解压缩它' – 2015-01-31 17:44:59
感谢您的快速回答!我会检查我的代码并留言。 – kukuk1de 2015-01-31 17:46:59