【问题标题】:Unzipping Files using Loop Through a Dataframe that Defines Filepath使用循环通过定义文件路径的数据框解压缩文件
【发布时间】:2021-02-11 04:05:29
【问题描述】:

我有一个数据框,其中包含我所有的目录和子目录文件路径。我的第一个数据集包含输入“路径”:

 Input: 
 \\data\A\New Jersey\Construction\2020.10.27\Results.zip
 \\data\A\New Jersey\Materials\2020.10.27\Results.zip
 \\data\A\Pennsylvania\Construction\2020.10.27\Results.zip
 \\data\A\Pennsylvania\Electrician\2020.10.27\Results.zip

我的第二个数据集包含“输出”路径:

 Output:
 \\data\A\New Jersey\Construction\2020.10.27
 \\data\A\New Jersey\Materials\2020.10.27
 \\data\A\Pennsylvania\Construction\2020.10.27
 \\data\A\Pennsylvania\Electrician\2020.10.27

如您所见,我希望将文件解压缩到同一个文件夹中。目前我使用 for 循环没有多大成功。这个for循环不正确吗?

 for(i in length(input)){
   for(f in length(output)){
      path <- input[i]
      out <- output[f]
      unzip(path, out) 
  }}

【问题讨论】:

    标签: r dataframe loops unzip


    【解决方案1】:

    创建一个包含您要解压缩的所有文件的列表。 然后你可以使用 lapply 解压整个列表

      lapply(filelist, unzip) #or sapply for data frames
    

    如果您有很多文件(和一个 ssd),您可以使用 pbapply 库来集成进度条(如果需要,还可以使用多核处理) - 没有 ssd 多核处理似乎比常规 lapply 慢 - 我认为这是因为普通硬盘的读写速度

    pblapply(filelist, unzip)
    

    对我来说是这样的:

    file_vec<-as.vector(filelist[1:5]) # my original filelist
    file_vec # is a vector
    sapply(file_vec, unzip)
    
         2020-08-01T000000_AIU-1936.ghg                 2020-08-01T003000_AIU-1936.ghg                 2020-08-01T010000_AIU-1936.ghg                
    [1,] "./2020-08-01T000000_AIU-1936.data"            "./2020-08-01T003000_AIU-1936.data"            "./2020-08-01T010000_AIU-1936.data"           
    [2,] "./2020-08-01T000000_AIU-1936.metadata"        "./2020-08-01T003000_AIU-1936.metadata"        "./2020-08-01T010000_AIU-1936.metadata"       
    [3,] "./2020-08-01T000000_AIU-1936-biomet.data"     "./2020-08-01T003000_AIU-1936-biomet.data"     "./2020-08-01T010000_AIU-1936-biomet.data"    
    [4,] "./2020-08-01T000000_AIU-1936-biomet.metadata" "./2020-08-01T003000_AIU-1936-biomet.metadata" "./2020-08-01T010000_AIU-1936-biomet.metadata"
         2020-08-01T013000_AIU-1936.ghg                 2020-08-01T020000_AIU-1936.ghg                
    [1,] "./2020-08-01T013000_AIU-1936.data"            "./2020-08-01T020000_AIU-1936.data"           
    [2,] "./2020-08-01T013000_AIU-1936.metadata"        "./2020-08-01T020000_AIU-1936.metadata"       
    [3,] "./2020-08-01T013000_AIU-1936-biomet.data"     "./2020-08-01T020000_AIU-1936-biomet.data"    
    [4,] "./2020-08-01T013000_AIU-1936-biomet.metadata" "./2020-08-01T020000_AIU-1936-biomet.metadata"
    

    我也尝试过使用 zip 并且它有效 - 我只是主要使用 licor 数据,因此使用 .ghg。我使用 Windows,工作目录设置为数据所在的位置。我对 linux/macOS 几乎没有经验,但它应该可以正常工作

    【讨论】:

    • 当我使用 lapply 语句时,我收到以下错误: In FUN(X[[i]], ...) : error 1 in extracting from zip file
    • 你的文件名是什么样的?我的意思是,你有完整路径还是只有相对路径名?
    • "\\\\data\\A\\New Jersey\\Construction\\2020.10.27\\Results.zip"
    • 文件路径列表可能有问题?是否可以使用数据框中的向量来做到这一点?
    • 对我来说确实如此,我会把它添加到我的答案中
    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多