Check if a directory contains a file with a given extension

China☆狼群 提交于 2020-03-13 04:51:07

问题


I need to check the current directory and see if a file with an extension exists. My setup will (usually) only have one file with this extension. I need to check if that file exists, and if it does, run a command.

However, it runs the else multiple times because there are multiple files with alternate extensions. It must only run the else if the file does not exist, not once for every other file. My code sample is below.


The directory is structured like so:

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

When I run:

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

The output is:

false
false
true
false

The issue with this is if I replaced print("false") with something useful, it will run it multiple times.

Edit: I asked this question 2 years ago, and it's still seeing very mild activity, therefore, I'd like to leave this here for other people: http://book.pythontips.com/en/latest/for_-_else.html#else-clause


回答1:


You can use the else block of the 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.

The else attached to a for will be run whenever the break inside the loop is not executed. If you think a for loop as a way to search something, then break tells whether you have found that something. The else is run when you didn't found what you were searching for.

Alternatively:

if not any(fname.endswith('.true') for fname in os.listdir('.')):
    # do stuff if a file .true doesn't exist

Moreover you could use the glob module instead of listdir:

import glob
# stuff
if not glob.glob('*.true')`:
    # do stuff if no file ending in .true exists



回答2:


If you only want to check that any file ends with a particular extension, use any.

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



回答3:


You should use the glob module to look for exactly the files that you're interested in:

import glob

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


来源:https://stackoverflow.com/questions/33400682/check-if-a-directory-contains-a-file-with-a-given-extension

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!