在 python 中根据文件路径获取不带后缀名的文件名,可以使用以下两种主流方法,均支持跨平台路径处理(windows/linux/macos):
方法一:使用 os.path 模块(传统方法)
import os
def get_filename_without_extension(file_path):
"""
获取不带扩展名的文件名
:param file_path: 文件路径(支持绝对路径/相对路径)
:return: 不带扩展名的文件名
"""
# 获取完整的文件名(包含扩展名)
full_filename = os.path.basename(file_path)
# 分离文件名和扩展名
filename, extension = os.path.splitext(full_filename)
return filename
# 使用示例
if __name__ == "__main__":
path1 = "/home/user/images/landscape.jpg"
path2 = "c:\\documents\\report.docx"
path3 = "./data/.gitignore" # 测试隐藏文件
print(get_filename_without_extension(path1)) # 输出: landscape
print(get_filename_without_extension(path2)) # 输出: report
print(get_filename_without_extension(path3)) # 输出: .gitignore
方法二:使用 pathlib 模块(python 3.4+ 推荐)
from pathlib import path
def get_filename_without_extension(file_path):
"""
获取不带扩展名的文件名
:param file_path: 文件路径
:return: 不带扩展名的文件名
"""
# 使用.stem属性直接获取无扩展名文件名
return path(file_path).stem
# 使用示例
if __name__ == "__main__":
path1 = "/var/log/system.log"
path2 = "relative/path/file.tar.gz"
path3 = "no_extension_file"
print(get_filename_without_extension(path1)) # 输出: system
print(get_filename_without_extension(path2)) # 输出: file.tar
print(get_filename_without_extension(path3)) # 输出: no_extension_file
关键特性说明:
跨平台兼容性:
- 自动处理不同操作系统的路径分隔符(
/和\) - 正确处理网络路径(
\\server\share\file)
特殊文件处理:
- 隐藏文件(如
.gitignore)保留前导点 - 无扩展名文件返回完整文件名
- 多扩展名文件(如
.tar.gz)只移除最后一个扩展名
路径解析细节:
os.path.basename()提取路径中的文件名部分os.path.splitext()严格分离最后一个点后的扩展名pathlib.path.stem直接获取无扩展名部分
边界情况处理:
- 空路径返回空字符串
- 目录路径返回目录名(不含扩展名)
- 纯扩展名文件(如
.htaccess)返回空字符串
扩展功能:
如果需要获取文件名中的所有部分(如处理复合扩展名),可以使用:
# 获取不带任何扩展名的完整基础名
base_name = path(file_path).name.split('.')[0]
# 获取所有扩展名(适用于多扩展名场景)
suffixes = path(file_path).suffixes # 返回列表 ['.tar', '.gz']
根据实际需求选择方法:
- 兼容旧版 python使用
os.path方案 - 新项目推荐使用更直观的
pathlib方案 - 需要精确控制扩展名处理逻辑时可结合字符串操作
以上就是python根据文件路径获取不带后缀名的文件名的两种方法的详细内容,更多关于python文件路径获取文件名的资料请关注代码网其它相关文章!
发表评论