web-dev-qa-db-fra.com

Extraire l'extension du fichier du chemin du fichier

Comment puis-je extraire l'extension d'un fichier à l'aide d'un chemin d'accès au fichier? Je sais que je peux le faire via l'expression régulière regexpr("\\.([[:alnum:]]+)$", x), mais je me demande s'il existe une fonction intégrée permettant de gérer ce problème?

41
SFun28

C'est le genre de chose que l'on trouve facilement avec les outils de base R. E.g .: ?? chemin.

Quoi qu'il en soit, chargez le package tools et lisez ?file_ext.

56
Carl Witthoft

Permettez-moi d’étendre une bonne réponse de https://stackoverflow.com/users/680068/zx8754

Voici l'extrait de code simple

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

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

Le résultat devrait être 'txt'.

4
andrii

La regexpr ci-dessus échoue si l'extension contient une valeur autre que alnum (voir, par exemple, https://en.wikipedia.org/wiki/List_of_filename_extensions ) En variante, vous pouvez utiliser la fonction suivante:

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

}

4
Pisca46

fonction simple sans paquet à charger:

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

Cette fonction utilise des pipes:

library(magrittr)

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

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