python如何从路径中获取文件名
在Python中,从文件路径提取文件名可以通过多种方法实现,以下是常用的几种方式及对应的实现细节:
1. 使用os.path
模块
获取完整文件名(含扩展名)
通过os.path.basename()
可直接提取路径中的文件名(包含扩展名):
import os
file_path = '/home/user/documents/file.txt'
file_name = os.path.basename(file_path) # 输出: 'file.txt' [[1, 2, 4, 6, 9, 14, 15, 19]]
分离文件名与扩展名
使用os.path.splitext()
可将文件名和扩展名拆分为元组:
base_name, ext = os.path.splitext(file_name)
print(base_name) # 输出: 'file' [[1, 6, 16, 20]]
print(ext) # 输出: '.txt' [[1, 6]]
获取目录路径
若需同时提取目录路径,可用os.path.dirname()
或os.path.split()
:
dir_path = os.path.dirname(file_path) # 输出: '/home/user/documents' [[1, 9]]
dir_tuple = os.path.split(file_path) # 输出: ('/home/user/documents', 'file.txt') [[1, 9]]
2. 使用pathlib
模块(推荐)
pathlib
提供了更面向对象的路径处理方式,适用于Python 3.4+版本:
from pathlib import Path
# 创建Path对象
path = Path('/home/user/documents/file.txt')
# 获取完整文件名(含扩展名)
file_name = path.name # 输出: 'file.txt' [[5, 15, 16, 20]]
# 获取不带扩展名的文件名
file_stem = path.stem # 输出: 'file' [[5, 15, 16, 20]]
# 获取扩展名
file_suffix = path.suffix # 输出: '.txt' [[5, 16]]
3. 字符串处理方法(不推荐)
虽然可通过字符串分割实现,但跨平台兼容性较差:
# 方法1:使用split()
path_str = 'C:/Users/Desktop/file.txt'
file_name = path_str.split('/')[-1] # 输出: 'file.txt' [[9, 17]]
# 方法2:使用rfind()
index = path_str.rfind('/')
file_name = path_str[index+1:] # 输出: 'file.txt' [[9]]
4. 其他方法
正则表达式
复杂场景下可用正则匹配,但需谨慎处理特殊字符:
import re
path_str = 'C:/Users/Desktop/tutorialsPoint.pdf'
match = re.search(r'[\w-]+\.\w+$', path_str)
if match:
file_name = match.group() # 输出: 'tutorialsPoint.pdf' [[2, 4]]
ntpath
模块(跨平台兼容)
在Windows和Linux环境下均适用:
import ntpath
file_name = ntpath.basename(path_str) # 输出: 'tutorialsPoint.pdf' [[14]]
总结
- 推荐方法:优先使用
pathlib
(简洁且跨平台)或os.path
(兼容旧版本)。 - 扩展名处理:需分离扩展名时,结合
os.path.splitext()
或pathlib.Path
的stem
属性。 - 避免手动字符串处理:路径分隔符(
/
或\
)可能因操作系统不同导致错误。
示例代码完整覆盖了文件名提取、目录分离及扩展名处理的需求,开发者可根据具体场景选择合适方法。