【问题标题】:Read *.csv as list from multiple folders从多个文件夹中读取 *.csv 作为列表
【发布时间】:2014-05-25 17:36:48
【问题描述】:

我在多个文件夹../t1/*.csv,../t2/*.csv,../t3/*.csv...等中有数千个 *csv 文件。

我可以从多个文件夹上传文件,如下所示:

filenames <- list.files(c("C:/Example/t1","C:/Example/t2"), pattern="*.csv", full.names=TRUE)
list.df <- lapply(filenames, read.csv)

但是我必须输入所有目录 C:/Example/t1C:/Example/t2 等。如何使用一个主目录读取所有数据(作为 data.frames 列表):C:/Example/*

【问题讨论】:

  • “上传”与它有什么关系?你知道那是什么意思吗?
  • 尝试阅读list.files 的帮助,尤其是recursive 参数。
  • 好的,read 更适合吗?不,它不适用于仅"C:/Example/,我已经尝试过了。
  • 这样的东西有用吗? n &lt;- 4; filenames &lt;- list.files(paste0(rep("C:/Example/t", n), seq_len(n)), pattern="*.csv", full.names=TRUE) 您将 n 定义为文件夹数
  • @大卫。完美运行!

标签: r csv


【解决方案1】:

使用list.filesrecursive=TRUE 将搜索第一个参数下的所有文件夹以查找匹配文件:

> list.files("./",recursive=TRUE)
[1] "a/a1.csv"    "a/a2.csv"    "a/notme.txt" "b/b1.csv"    "d/e/e1.csv" 

如果我只想要 CSV,那就是我当前目录下的所有文件:

> list.files("./",recursive=TRUE,pattern="*.csv")
[1] "a/a1.csv"   "a/a2.csv"   "b/b1.csv"   "d/e/e1.csv"

注意它在二级d/e/ 文件夹中的样子?

如果您只想进入一个特定的深度,请尝试Sys.glob - 这些模式匹配文件夹和文件,并且这些示例适用于当前目录:

只有第一级:

> Sys.glob("*/*.csv")
[1] "a/a1.csv" "a/a2.csv" "b/b1.csv"

只有二级:

> Sys.glob("*/*/*.csv")
[1] "d/e/e1.csv"

【讨论】:

  • 过去我发现dir 函数很有用。例如dir(pattern = 't[0-9]')list.filesdir 更受欢迎吗?我在任何地方都没有看到太多dir 的用法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2015-03-29
  • 2023-03-27
相关资源
最近更新 更多