【问题标题】:Extract files from multiple folders in R从R中的多个文件夹中提取文件
【发布时间】:2023-02-05 21:12:17
【问题描述】:

我有一个充满文件夹 的目录,在每个文件夹中都有一个 .tsv 文件,我需要将其提取到不同的目录(以便文件夹中的所有文件都在一个文件夹中)

我的想法是在 R 中编写一个 for 循环,它会得到一个包含根目录中所有文件的列表,打开这些文件,将 .tsv 文件复制到新位置

它看起来像这样:

Files <- list.files("directory")
directory1 <- "root directory"
directory2 <- "place they need to go"
for (i in files){
file.copy(from = directory1,
          to = directory2)}

然而,这是行不通的。

【问题讨论】:

  • 您只是将目录/文件路径放在 file.copy() 命令中,而不是文件名本身。您的循环有错误,因为您定义了 i 但根本没有在循环中使用它。您可能想在循环中尝试使用 ..(from = paste0(directory1, i, ....)(但请确保 directory1 末尾有一个 /)。

标签: r


【解决方案1】:

您没有在循环中使用 i,所以这是问题的一部分。尝试

for (i in files){
  file.copy(from = file.path(directory1, i),
            to = file.path(directory2, i))
}

【讨论】:

  • 这没有用,我认为必须有一种方法来指定必须移动的文件
  • “没有工作”是什么意思?你收到错误了吗?该文件是否未出现在新位置?还是您想移动它而不是复制它?如果要移动文件,还有 file.rename 而不是 file.copy
  • 该文件确实没有出现在新位置。抱歉不确定
  • 您的代码中同时包含 "directory""root directory"。这些路径是否相同?如果该文件不存在,我希望您会得到一个错误。 length(Files) 返回什么。您确定列表中有文件吗?
  • 不,这些路径不一样,lenght files 返回 5。这是正确的,因为有 5 个文件夹包含文件(在本例中)
【解决方案2】:

虽然现在可能已经晚了,但解决方案是在 list.files() 函数中指定 recursive=full.names= 参数。

之后,您可以在不使用循环的情况下复制文件:

Files <- list.files("directory", recursive=TRUE, full.names=TRUE) 
new_directory <- "place they need to go"
file.copy(from=Files, to="new_directory")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多