R Studio-0.99.451:如何解压缩文件夹并将文件粘贴到目标文件夹

时间:2017-11-20 17:14:14

标签: r rstudio geospatial

我正在尝试提取(解压缩)文件夹(即" pakistan.zip"其中包含5个文件Pak_admin0.shp,Pak_admin0.shx,Pak_admin0.dbf,Pak_admin0.prj,Pak_admin0.qpj)并复制.shp,.shx,.dbf文件从该文件夹到目标文件夹的文件使用Rstudio 0.99.451版本,包含以下代码:

for(j in list(".shp", ".shx", ".dbf"))
  {
  fname <- unzip(file=paste("pakistan", j, sep=""), zipfile= "pakistan.zip")
  file.copy(fname, paste("./pakistan", j, sep="/"), overwrite=TRUE)
}

unlink("pakistan.zip")

但它给了我以下错误

Warning messages: 
1: In unzip(file = paste("zupanije", j, sep = ""), zipfile = "pakistan.zip") :   requested file not found in the zip file 
2: In unzip(file = paste("zupanije", j, sep = ""), zipfile = "pakistan.zip") :   requested file not found in the zip file 
3: In unzip(file = paste("zupanije", j, sep = ""), zipfile = "pakistan.zip") :   requested file not found in the zip file

请提供任何可能的解决方案来处理此错误。 这些是我找到的实际代码,但zip.file.extract函数不再是R:

的一部分
for(j in list(".shp", ".shx", ".dbf")){ 
fname <- zip.file.extract(file=paste("zupanije", j, sep=""), 
zipname="zupanije.zip") 
file.copy(fname, paste("./zupanije", j, sep=""), overwrite=TRUE) 
} 
unlink("zupanije.zip")

我希望自动化从网站下载形状文件的结构并将其解压缩并放入另一个文件夹,然后使用 readShapePoly()函数使用 maptools 库显示它

1 个答案:

答案 0 :(得分:0)

您的代码适用于包含这些文件的zip文件。该错误表明这些文件不包含在zip文件中。既然你说你试图提取一个&#34;目录&#34;也许他们在zipfile的子目录中?例如,如果我将文件放在&#34; temp&#34;目录然后创建该目录的zip文件,我必须将目录添加到文件路径,如下所示:

f <- "test.zip"
for(j in list(".shp", ".shx", ".dbf"))
{
  # note "pakistan" directory added to path
  # unzip pakistan/zupanije.shp (or .shx or .dbf) out of test.zip
  fname <- unzip(file=paste("pakistan/zupanije", j, sep=""), zipfile= f)
  #copy extracted file to destination directory
  file.copy(fname, paste("./destination", j, sep="/"), overwrite=TRUE)
}

如果您在类似Linux的环境中,可以尝试以下命令来检查zip文件,并确保它包含您认为包含的内容以及您期望的路径:

unzip -vl pakistan.zip

顺便说一句,你的代码将输出文件&#34; ./ pakistan / .dbf&#34;,&#34; ./ pakistan / .shx&#34;和&#34; ./巴基斯坦/ .shp&#34;。那是你要的吗?或者您可能想要&#34; pakistan.shx&#34;等等,在这种情况下需要进行此更改:

-file.copy(fname, paste("./pakistan", j, sep="/"), overwrite=TRUE)
+file.copy(fname, paste("./pakistan", j, sep=""), overwrite=TRUE)