从完整文件路径中查找文件名

200

有没有一种不必操作字符串就能从文件全路径(文件路径的一部分)中提取文件名的方法?

Java 中相应的方法是:

File f = new File ("C:/some_dir/a")
f.getName() //output a
f.getFullAbsolutePath() //output c:/some_dir/a
4个回答

378

使用

basename("C:/some_dir/a.ext")
# [1] "a.ext"
dirname("C:/some_dir/a.ext")
# [1] "C:/some_dir"

28
我知道basename()函数,但后来就忘了。这些函数应该在list.filesfile.path的“参见”部分提到。 - Paul Rougieux
4
是的。我每周都在谷歌上搜索并偶然看到这个答案。 - mzuba
1
提取没有扩展名的基本名称怎么样?这也是一个原生函数吗? - Honeybear
2
@PaulRougieux 我提交了一个功能请求,这应该会包含在即将发布的 R 版本中 :) - Gregor Thomas

24

tidyverse的中文对应物位于fs软件包中。{fs}在底层使用libuv

library("fs")

path_file("/some/path/to/file.xyz")
#> [1] "file.xyz"

path_dir("/some/path/to/file.xyz")
#> [1] "/some/path/to"

本示例由 reprex package (v0.3.0) 生成于2020年2月19日


非常有帮助,谢谢。刚刚使用了这段代码为列表列设置名称,如果没有path_file(),这将是非常繁琐的。 - James Crumpler

2

@Honeybear。 你可以使用{tools} R包中的函数来删除文件名中的扩展名。

tools::file_path_sans_ext("ABCD.csv")
## [1] "ABCD"

参见此篇回答


1
在尝试找到在R中从路径中提取文件名的最快方法时,我发现如果速度是一个问题,使用带有正则表达式".*/"subbasename快大约一个数量级。
files<-paste0("http://some/ppath/to/som/cool/file/",1:1000,".flac")

sub(".*/", "", files,perl = T)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接