如何在Python3中提取不含目录路径的文件名及扩展名?
在Python3中提取Windows路径的文件名及扩展名的正确方法
你需要从Windows路径C:\Users\Johnny\Downloads\Misc\ticket.jpg中提取文件名ticket.jpg,当前代码未能实现预期效果,以下是问题分析和解决方案:
原代码的问题
- 语法错误:
file_result = file_name.fetchone(未闭合括号,会导致代码运行报错 - 多余操作:
os.path.basename(path).split('/')[-1]完全没必要——os.path.basename本身就能适配Windows路径分隔符,直接返回文件名;而用/分割Windows路径字符串不会产生任何分割效果,反而可能掩盖问题
两种简单实现方法
方法1:使用os.path.basename()(兼容所有Python3版本)
os.path模块会自动识别系统路径分隔符,无需手动处理斜杠/反斜杠:
import os path = r"C:\Users\Johnny\Downloads\Misc\ticket.jpg" print(os.path.basename(path)) # 输出:ticket.jpg
方法2:使用pathlib(Python3.4+推荐,更简洁)
pathlib是Python3.4引入的面向对象路径处理库,代码更直观易读:
from pathlib import Path path = Path(r"C:\Users\Johnny\Downloads\Misc\ticket.jpg") print(path.name) # 输出:ticket.jpg
修正后的完整代码
基于os.path的版本
import sys import sqlite3 import os conn = sqlite3.connect(sys.argv[1], uri=True) curr = conn.cursor() curr.execute("select * FROM downloads") # 获取最新下载的文件路径 file_name = curr.execute("select current_path from downloads ORDER BY end_time DESC") file_result = file_name.fetchone() # 修复括号闭合问题 if file_result: # 增加空值判断,避免索引错误 path = file_result[0] print(os.path.basename(path)) # 直接提取文件名
基于pathlib的版本
import sys import sqlite3 from pathlib import Path conn = sqlite3.connect(sys.argv[1], uri=True) curr = conn.cursor() curr.execute("select * FROM downloads") file_name = curr.execute("select current_path from downloads ORDER BY end_time DESC") file_result = file_name.fetchone() if file_result: path = Path(file_result[0]) print(path.name)
内容的提问来源于stack exchange,提问作者J Lee
相关产品推荐
相关产品推荐

