Python从文件路径提取文件名异常:获取到父文件夹名而非目标文件名的问题咨询
问题排查与解决方案
我来帮你梳理下问题所在,然后给出对应的解决办法:
问题根源
你当前代码里的label = os.path.basename(os.path.dirname(path))这行逻辑搞反了:
os.path.dirname(path)会返回文件所在的父文件夹路径(比如对于D:\AI\Deep learning\face generator\images\chris evans 1.jpg,它返回的是D:\AI\Deep learning\face generator\images)- 再对这个父路径用
os.path.basename(),自然就得到了父文件夹名images,这完全不是你想要的文件名。
两种正确实现方式
方式一:直接提取完整路径的文件名
直接对拼接好的path调用os.path.basename(),就能拿到目标文件名:
import os for file in files: if file.endswith("png") or file.endswith("jpg"): path = os.path.join(root, file) print(path) label = os.path.basename(path) # 直接获取完整路径的文件名部分 print(label)
方式二:直接使用循环变量file
如果你的files列表里存储的本来就是纯文件名(不带任何路径),那直接用file作为label更高效,省去了额外的路径处理:
import os for file in files: if file.endswith("png") or file.endswith("jpg"): path = os.path.join(root, file) print(path) label = file # 直接用遍历得到的文件名 print(label)
小优化建议
如果想让后缀匹配更灵活(比如兼容大写后缀.PNG、.JPG),可以把判断条件改成:
if file.lower().endswith(('.png', '.jpg')):
这样不管文件名后缀是大写还是小写,都能被正确匹配到。
内容的提问来源于stack exchange,提问作者Houmes
相关产品推荐
相关产品推荐

