我正在使用 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'
欢迎任何意见!
最佳答案
您可以使用 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()
更快在单个文件上。
关于r - 检查存档中文件的存在(zip),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28254592/