【问题标题】:R: List files from directory with extension and nameR:列出具有扩展名和名称的目录中的文件
【发布时间】:2021-03-07 10:18:33
【问题描述】:

我正在从目录中提取一些文件,如下所示并将它们存储在数据表中:

FileList <- list.files(path = mydir, pattern = pattern, full.names = TRUE, all.files = TRUE )

FileList <- as.data.table(FileList)

得到的表中的一条记录如下:dir/AA.csv 我想获得两个带有文件名的附加列,例如xyz 和格式,例如cvc,类似:

FileList[, Format : = "**help1**"] # in the example "csv"

FileList[, Name : = "**help2**"] # in the example "AA"

对于“help1”:从右边到第一个点的子字符串 对于“help2”:从右到第一个斜杠的子字符串,不包括末尾的格式

有什么优雅高效的方法吗?

【问题讨论】:

  • 适用于扩展名:FileList

标签: r substring


【解决方案1】:

您可以使用 R 基础附带的工具包轻松完成此操作。我加载 dplyr 以使用管道 (%&gt;%) 和 tibble() 函数。从tools 包中,我使用file_ext()file_path_sans_ext()

library(dplyr)
library(tools)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

考虑到我想获取data目录下的.xlsx文件

mydir <- "data"
pattern <- "\\.xlsx"
FileList <- list.files(path = mydir, pattern = pattern, all.files = TRUE, full.names = TRUE)

my_data <- tibble(
    FileList = FileList,
    Format = file_ext(FileList),
    Name = list.files(path = mydir, pattern = pattern, all.files = TRUE) %>% file_path_sans_ext()
)

my_data

# # A tibble: 9 x 3
# FileList                          Format Name                 
# <chr>                             <chr>  <chr>                
# 1 data/ali pei pat reference.xlsx xlsx   ali pei pat reference
# 2 data/ali pei pat.xlsx           xlsx   ali pei pat          
# 3 data/ali pei pci.xlsx           xlsx   ali pei pci          
# 4 data/ali pei pen.xlsx           xlsx   ali pei pen          
# 5 data/alineamiento pei pat.xlsx  xlsx   alineamiento pei pat 
# 6 data/alineamiento pei pci.xlsx  xlsx   alineamiento pei pci 
# 7 data/alineamiento pei pen.xlsx  xlsx   alineamiento pei pen 
# 8 data/lista de cotejo.xlsx       xlsx   lista de cotejo      
# 9 data/test.xlsx                  xlsx   test

reprex package (v0.3.0) 于 2021-03-07 创建

【讨论】:

    【解决方案2】:

    最后我是这样做的:

      FileList <- list.files(path = mydir, pattern = pattern, full.names = TRUE, all.files = TRUE )
      FileList <- as.data.table(FileList)
      FileList <- FileList[, Extension := tstrsplit(FileList, "\\.")[[2]]]
      FileList <- FileList[, Name := basename(FileList)]
      FileList <- FileList[, Name := gsub("\\..*","",Name)]
    

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多