我正在尝试编写一些简单的代码来检查特定目录是否存在以及该目录是否包含任何文件。如果它存在并且它包含文件,那么我希望它做一些事情。如果没有,那么我希望它做其他事情。
我一直在使用os模块执行文件浏览器操作,到目前为止,它似乎工作得很好。
if os.listdir("D:\Inventory\Joy\XL") != []: #Checks to see if the directory is empty
print("This directory is full")
else:
print("This directory is empty")
if (os.path.exists("D:\Inventory\Joy\XL")) is True: #THIS ISN'T RIGHT BUT I DON'T KNOW WHAT TO DO.
print("This directory exists")
else:
print("The directory doesn't exist")
我已经读过,应该避免使用“if x == True然后y”或“if x is True然后y”,但我不知道如何(或为什么)避免它。而且,即使我想蔑视惯例,我也不知道如何实现它。人们说这是多余的,但是,我不明白为什么。我已经在Stack Overflow中读到了关于这个问题的类似条目,但我还没有理解任何答案。
答案 0 :(得分:1)
测试列表不为空的惯用方法是
if os.listdir("D:\Inventory\Joy\XL"):
将空列表视为虚假值,将非空列表视为真值。
由于os.path.exists
返回一个布尔值,因此不需要执行任何,只返回另一个布尔值;你已经有一个。将True
值与True
进行比较会返回True
;将False
与True
进行比较会返回False
,因此您只需返回原始输入内容。
if os.path.exists("D:\Inventory\Joy\XL"):
答案 1 :(得分:0)
我读过,应该避免使用“if x == True然后y”或“if x 是真的然后y“,但我不知道如何(或为什么)避免它。
首选样式如下所示:
foo = False
bar = True
if foo:
print "Foo!"
elif bar:
print "Bar!"
else:
print "Someone broke logic!"
这种风格是首选,因为它避免了多余的“是真”。
人们说这是多余的,但是,我不明白为什么
这是多余的,因为对于任何表达式e,在布尔上下文中计算e is True
== e
。 “在布尔上下文中进行评估”只是意味着我们正在测试表达式的值是否为“Falsey”值[False, None, [], {}, "", 0]
之一。如果它是这些值之一,则结果为False
。如果不是,则为True
。