循环合并子文件夹中的所有 pdf 文件

问题描述 投票:0回答:1

我正在尝试创建一个循环来合并子文件夹中的所有 pdf,并使用子文件夹名称为每个子文件夹创建一个唯一的 pdf。

举个例子: 我有“23201018”,其中有子文件夹和其他文档,这些都是不相关的

  • “T34709”
  • “T8257”
  • 等等

每个子文件夹内有几个我想合并并给出的pdf,合并后的pdf,子文件夹的名称。

我成功地一次运行一个子文件夹

wd<-setwd(WDPATH)
list.files(paste0(wd,"/23201018"))# Folder with subfolders inside
#  "23201018.XLSX" "T34709" "T26045" "T85625"
list.files(paste0(wd,"/23201018/T34709")) # I tried for one subfolder at a time


# CREATES A JOIN PDF WITH ALL THE DOCUMENTS IN THE FOLDER
staple_pdf(
  input_directory = paste0(wd,"/23201018/T34709"),
  input_files = NULL,
  output_filepath = paste0(wd,"/23201018/T34709/",basename(paste0(wd,"/23201018/T34709")),".pdf"),
  overwrite = FALSE
)

我怎样才能在循环中做到这一点?

r loops for-loop subdirectory
1个回答
0
投票

这是一个示例,假设您当前的工作目录 包含一个名为“23201018”的文件夹。该文件夹内有子文件夹 “one”和“two”包含 pdf 文件。还有另一个文件夹“no_pdf”, 没有 pdf 文件。

  1. 收集所有包含 pdf 文件的文件夹。
  2. 使用 pdf 文件的文件路径创建一个向量。
  3. 使用
    mapply()
    将其全部输入到
    staplr::staple_pdf()
    函数中。
library(staplr)

list.dirs("23201018/")
#> [1] "23201018/"        "23201018//no_pdf" "23201018//one"    "23201018//two"

folder_names <- 
  list.files("23201018/", recursive = TRUE, pattern = "\\.pdf",
             full.names = TRUE) |> 
  dirname() |> 
  unique()

pdf_names <- 
  paste0(folder_names, ".pdf") 

pdf_paths <- 
  file.path("23201018", pdf_names)

mapply(\(x, y) staple_pdf(input_directory = x,
                          output_filepath = y), 
       folder_names,
       pdf_names)
#> 23201018//one 23201018//two 
#>          TRUE          TRUE
© www.soinside.com 2019 - 2024. All rights reserved.