当前位置: 首页 > news >正文

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.Pathstem属性。
  • 避免手动字符串处理:路径分隔符(/\)可能因操作系统不同导致错误。

示例代码完整覆盖了文件名提取、目录分离及扩展名处理的需求,开发者可根据具体场景选择合适方法。

相关文章:

  • Helm快速开始
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pnalloc函数
  • vue3-03初学vue3中的配置项setup(Composition API (组合API组件中所用到的:数据、方法等,均要配置在setup中)
  • 2013年下半年软件设计师上午题考察知识点及其详细解释(附真题及答案解析)
  • 探秘 DeepSeek R1 模型:跨越多领域的科技奇迹,引领智能应用新浪潮
  • springmvc(13/158)
  • 股票交易之多策略协调规划
  • 文件操作(PHP)(小迪网络安全笔记~
  • Win10系统Docker+DeepSeek+ragflow搭建本地知识库
  • JavaScript(JS)
  • EasyPoi系列之框架集成及基础使用
  • python之递归
  • nnUNet V2修改网络——加入GHPA 模块
  • 【Qt】 Data Visualization
  • P8752 [蓝桥杯 2021 省 B2] 特殊年份——string提取索引转换为值
  • ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
  • vue3和vue2的组件开发有什么区别
  • 3.10 企业级AI内容生成引擎:从策略到落地的全链路技术指南
  • 【大模型】Transformers基础组件 - Tokenizer
  • 2024年职高单招或高考计算机类投档线
  • AI观察|从万元到百万元,DeepSeek一体机江湖混战
  • 人民日报钟声:通过平等对话协商解决分歧的重要一步
  • 他站在当代思想的地平线上,眺望浪漫主义的余晖
  • 何谓“战略稳定”:“长和平”的实现基础与机制
  • 全球医药股普跌,A股创新药板块下挫
  • 海航回应“男团粉丝为追星堵住机舱通道”:已紧急阻止