检查目录是否包含具有给定扩展名

时间:2015-10-28 20:09:14

标签: python file-exists

我需要检查当前目录,看看是否存在带扩展名的文件。我的设置(通常)只有一个带有此扩展名的文件。我需要检查该文件是否存在,如果存在,则运行命令。

但是,它会多次运行else,因为有多个文件具有备用扩展名。如果文件不存在,它必须只运行else,而不是每隔一个文件运行一次。我的代码示例如下。

目录的结构如下:

dir_________________________________________
    \            \            \            \     
 file.false    file.false    file.true    file.false

当我跑步时:

import os
for File in os.listdir("."):
    if File.endswith(".true"):
        print("true")
    else:
        print("false")

输出结果为:

false
false
true
false

这个问题是如果我用有用的东西替换print("false"),它会多次运行。

编辑:2年前我问过这个问题,而且它仍然看到非常温和的活动,因此,我想将此留给其他人:http://book.pythontips.com/en/latest/for_-_else.html#else-clause

3 个答案:

答案 0 :(得分:20)

您可以使用else的{​​{1}}块:

for

只要循环中的for fname in os.listdir('.'): if fname.endswith('.true'): # do stuff on the file break else: # do stuff if a file .true doesn't exist. 未执行,就会运行else附加的for。如果您认为break循环是搜索某些内容的方式,那么for会告诉您是否找到了某些内容。当您没有找到要搜索的内容时,break就会运行。

可替换地:

else

此外,您可以使用glob模块而不是if not any(fname.endswith('.true') for fname in os.listdir('.')): # do stuff if a file .true doesn't exist

listdir

答案 1 :(得分:9)

如果您只想检查任何文件是否以特定扩展名结尾,请使用any

import os
if any(File.endswith(".true") for File in os.listdir(".")):
    print("true")
else:
    print("false")

答案 2 :(得分:4)

您应该使用glob模块来查找您感兴趣的文件:

import glob

fileList = glob.glob("*.true")
for trueFile in fileList:
    doSomethingWithFile(trueFile)