获取R中没有扩展名的文件名

Mat*_*sor 46 r r-faq

我有点像R新手,因此有疑问.

我有一个文件

ABCD.csv 
Run Code Online (Sandbox Code Playgroud)

.csv之前的长度不固定,并且可以变化为任何长度.如何在.csv之前提取部分.

Tyl*_*ker 98

file_path_sans_ext标准安装工具包内置了一个内置文件,可以在没有扩展名的情况下获取文件.

tools::file_path_sans_ext("ABCD.csv")
## [1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

  • 经过测试,我认为最好将文件路径放在`basename()`中作为`file_path_sans_ext(basename(filepath))`。 (7认同)
  • 任何寻找关于这个和类似函数的更多细节的人,看看`?tools :: file_ext` (5认同)

Jas*_*n V 26

basename还将删除通向该文件的路径.使用此正则表达式,任何扩展名都将被删除.

filepath <- "d:/Some Dir/ABCD.csv"
sub(pattern = "(.*)\\..*$", replacement = "\\1", basename(filepath))

# [1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

或者,使用file_path_sans_extTyler Rinker建议:

file_path_sans_ext(basename(filepath))

# [1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

  • 特殊情况:具有“多个扩展名”的文件,例如“ABCD.txt.csv”(是的,它发生了),然后只需添加一个“?” 使表达式非贪婪: `sub(pattern = "(.*?)\\..*$", replacement = "\\1", basename(filepath))` (3认同)

akr*_*run 13

你可以使用subsubstr

sub('\\.csv$', '', str1) 
#[1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

要么

substr(str1, 1, nchar(str1)-4)
#[1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

使用来自@JasonV帖子的'file_path'

sub('\\..*$', '', basename(filepath))
#[1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

要么

library(stringr)
str_extract(filepath,  perl('(?<=[/])([^/]+)(?=\\.[^.]+)'))
#[1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

数据

str1 <- 'ABCD.csv'
Run Code Online (Sandbox Code Playgroud)


wib*_*ley 11

fs::path_ext_remove()“删除最后一个扩展名并返回路径的其余部分”。

fs::path_ext_remove(c("ABCD.csv", "foo.bar.baz.txt", "d:/Some Dir/ABCD.csv"))

# Produces: [1] "ABCD"             "foo.bar.baz"      "D:/Some Dir/ABCD"
Run Code Online (Sandbox Code Playgroud)


Aga*_*ain 5

你也可以试试这个:

data <- "ABCD.csv"
gsub(pattern = "\\.csv$", "", data)

#[1] "ABCD"
Run Code Online (Sandbox Code Playgroud)

这在文件列表的情况下也很有帮助,比如

data <- list.files(pattern="\\.csv$") ,使用该代码将删除列表中所有文件的扩展名。


ste*_*nmg 5

如果您有多个(可能的扩展名)的文件名,并且只想去掉最后一个扩展名,您可以尝试以下操作。

考虑文件名foo.bar.baz.txt这个

sub('\\..[^\\.]*$', '', "foo.bar.baz.txt")
Run Code Online (Sandbox Code Playgroud)

会给你留下foo.bar.baz