R:在不同的子目录/文件夹中计算具有特定扩展名的文件数

时间:2017-12-31 02:59:54

标签: r

我有一个书目目录/文件夹(/ Biblio),包含66个子目录/文件夹(/ 01文件夹,/ 02文件夹,... / 66文件夹),其中包含不同数量的具有不同扩展名的文件(例如pdf,txt,csv ,...),以及具有类似扩展名的文件的子文件夹,但我对这些子子文件夹的信息不感兴趣。某些子文件夹没有任何“pdf”文件。 我想计算每个子文件夹中“pdf”文件的数量

我可以在“/ Biblio”的所有子文件夹中列出pdf文件:

BiblioPath = "C:/Biblio"
BiblioDir = list.dirs(path = BiblioPath, full.names = TRUE, recursive = FALSE)
BiblioFiles = list.files(path = BiblioDir, pattern = "pdf", recursive = FALSE, full.names = TRUE) 

(注意:字符串“pdf”永远不会出现在我的文件名中)。 “BiblioFiles”是pdf文件的完整列表,但我不知道如何在没有循环的情况下计算每个子目录中有多少“pdf”文件。

3 个答案:

答案 0 :(得分:1)

tidyverse:

fils <- list.files("~/Development", pattern="pdf$", full.names = TRUE, recursive = TRUE)
dirs <- dirname(fils)
dirs <- sapply(dirs,digest::digest) # you don't need to see my dir names so just remove this from your work
as.data.frame(table(dirs))
##                                dirs Freq
## 1  06e6c4fed6e941d00c04cae3bd24888b   18
## 2  0c25ef8d27250f211d56eff8641f8beb    1
## 3  3e30987a34a74cb6846abc51e48e7f9e    1
## 4  70750a506855c6c6e09f8bdff32550f8    4
## 5  84088c9c18b0eb10478f17870886b481    1
## 6  8c5cbe2598f1f24f1549aaafd77b14c9    1
## 7  9008083601c1a75def1d1418d8acf39e    1
## 8  98bf27d6686a52772cb642a136473d86    9
## 9  baeb85661aad8bff2f2b52cb55f14ede    1
## 10 c07bfc45ce148933269d7913e1c5e833    1
## 11 c484306deae0a70b46854ede3e6b317a   22
## 12 e07698c59f5c11ac61e927e91c2e8493   27
## 13 e71c330b185bf4974d26d5379793671b    1
## 14 fe2e8912e58ba889cf7c6c3ec565b2ee    4

Date

答案 1 :(得分:0)

由于您只想计算PDF文件的数量,因此您不需要此处的文件名,因此不需要第三行尝试的代码。

从前两行开始

BiblioPath = "C:/Biblio"
BiblioDir = list.dirs(path = BiblioPath, full.names = TRUE, recursive = FALSE)

然后创建一个数据框,其中包含文件夹的名称和PDF计数,例如

x <- data.frame( Dir = BiblioDir, no = 0 )

并使用

计算的文件数更新列
for( i in seq( length( BiblioDir ) ) ) x$no[ i ] <- 
    length( list.files(path = BiblioDir[ i ], pattern = "pdf", recursive = FALSE, full.names = TRUE)  )

这将为您提供一个data.frame x,其中包含文件夹名称和每个文件夹的PDF文件。

这个 是一个循环,不确定你的问题中“没有循环”是否是一个条件;但我认为没有任何理由不在这里使用循环。

答案 2 :(得分:0)

我感谢@Richard Border和@alistaire的快速,类似,简单和优雅的答案。由于它们已作为评论发布,我已决定复制我喜欢的答案:

sapply(BiblioDir,function(dir){length(list.files(dir,pattern='pdf'))})

它完美无缺,我喜欢没有显式循环。