os.path模块路径判断isfile()和isdir()中的坑

本文讲述了在Python中使用os.path模块进行文件和目录判断时的注意事项,特别关注了isfile()和isdir()在实际路径不存在时的行为,以及如何通过其他方法如basename和splitext来推测不存在路径的类型。
摘要由CSDN通过智能技术生成



1、背景描述


Python中的os模块提供了与操作系统交互的功能。它允许你访问文件系统、执行系统命令、管理进程和环境变量等,是Python的标准库

其中os.path模块的exists()、isfile()、isdir()主要用于判断路径是否存在、路径是否是文件、路径是否是目录

但有时候os.path模块的isfile()、isdir()可能会“失效”,例如:

print(os.path.isfile("path/a.txt"))     # False
print(os.path.isdir("path/a"))          # False

这是怎么回事呢?不能吧,os可是Python的标准库啊

2、os.path模块isfile()和isdir()的正确用法


在Python中,如果一个路径实际上不存在,那么我们无法直接通过os.path模块的isfile()isdir()函数来判断这个路径是文件路径还是文件夹路径,此时两个函数都会返回False。像上面那样

如果实际路径存在,例如:

print(os.path.isfile(r"C:\Users\cc\Desktop\a.txt"))    # True
print(os.path.isdir(r"C:\Users\cc\Desktop\a"))         # True

已经存在的绝对路径对os.path模块的isfile()isdir()函数才会真正起作用

os.path模块的exists()方法可用于判断给定的路径是否存在

print(os.path.exists("path/a.txt"))     # False
print(os.path.exists("path/a"))         # False
print(os.path.exists(r"C:\Users\cc\Desktop\a.txt"))    # True
print(os.path.exists(r"C:\Users\cc\Desktop\a"))        # True

也就是说,os.path模块的isfile()isdir()会先通过exists()判断路径是否存在,如果不存在,会直接返回False

3、实际不存在的路径如何判断文件还是目录


对于实际不存在的路径,我们可以通过检查路径字符串的最后一部分是否包含一个扩展名来猜测它是否是一个文件路径。这种方法并不完全准确,因为有些文件可能没有扩展名,而有些目录的名字可能包含.

暂时这么解决吧,如果有大佬有更好的办法,欢迎交流

import os

# 判断不存在的路径是否是文件
def isfile(path: str):
    base = os.path.basename(path)
    suffix = os.path.splitext(base)[1]
    return True if suffix != '' and '.' in suffix else False

判断结果:

print(isfile("path/a.txt"))    # True
print(isfile("path/a"))        # False

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值