从文件路径中提取文件扩展名

时间:2011-10-15 16:19:58

标签: r file-extension built-in

如何将文件路径作为字符提取文件的扩展名?我知道我可以通过正则表达式regexpr("\\.([[:alnum:]]+)$", x)来做到这一点,但想知道是否有内置函数来处理这个问题?

6 个答案:

答案 0 :(得分:60)

这是R基本工具很容易找到的东西。例如:??路径。

无论如何,请加载tools包并阅读?file_ext

答案 1 :(得分:5)

让我从https://stackoverflow.com/users/680068/zx8754

延伸一点点回答

以下是简单的代码段

  # 1. Load library 'tools'
  library("tools")

  # 2. Get extension for file 'test.txt'
  file_ext("test.txt")

结果应该是'txt'。

答案 2 :(得分:4)

如果扩展名包含非alnum,则上面的regexpr会失败(请参阅例如https://en.wikipedia.org/wiki/List_of_filename_extensions) 作为一个替代,可以使用以下功能:

getFileNameExtension <- function (fn) {
# remove a path
splitted    <- strsplit(x=fn, split='/')[[1]]   
# or use .Platform$file.sep in stead of '/'
fn          <- splitted [length(splitted)]
ext         <- ''
splitted    <- strsplit(x=fn, split='\\.')[[1]]
l           <-length (splitted)
if (l > 1 && sum(splitted[1:(l-1)] != ''))  ext <-splitted [l] 
# the extention must be the suffix of a non-empty name    
ext

}

答案 3 :(得分:0)

此功能使用管道:

library(magrittr)

file_ext <- function(f_name) {
  f_name %>%
    strsplit(".", fixed = TRUE) %>%
    unlist %>%
    extract(2)
 }

 file_ext("test.txt")
 # [1] "txt"

答案 4 :(得分:0)

一个简单的函数,没有要加载的包:

getExtension <- function(file){ 
    ex <- strsplit(basename(file), split="\\.")[[1]]
    return(ex[-1])
} 

答案 5 :(得分:0)

只提取不带点的文件扩展名:

tools::file_ext(fileName)

用点提取文件扩展名:

paste0(".", tools::file_ext(fileName))