web-dev-qa-db-ja.com

ファイルパスからファイル拡張子を抽出する

ファイルパスを文字として指定すると、ファイルの拡張子を抽出できますか?私は正規表現regexpr("\\.([[:alnum:]]+)$", x)を介してこれを行うことができることを知っていますが、これに対処する組み込み関数があるのだろうか?

48
SFun28

これは、Rの基本ツールで簡単に見つけられるようなものです。例:??パス。

とにかく、toolsパッケージを読み込み、?file_ext

65
Carl Witthoft

https://stackoverflow.com/users/680068/zx8754 から少し素晴らしい答えを拡張させてください

ここに簡単なコードスニペットがあります

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

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

結果は「txt」になります。

8
andrii

拡張子にalnum以外が含まれている場合、上記の正規表現は失敗します(例 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

}

4
Pisca46

ロードするパッケージのない単純な関数:

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

この関数はパイプを使用します。

library(magrittr)

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

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