Is it possible to see files with certain extensions with the os.listdir command? I want it to work so it may show only files or folders with .f at the end. I checked the documentation, and found nothing, so don't ask.
5 Answers
glob is good at this:
import glob for f in glob.glob("*.f"): print(f) 2 Comments
Galilsnap
+1 wow, that helped a lot! But cant we just do print(glob.glob("*.py")) ?
Ned Batchelder
You can do that, glob.glob returns a list, do what you want with it.
Don't ask what?
[s for s in os.listdir() if s.endswith('.f')] If you want to check a list of extensions, you could make the obvious generalization,
[s for s in os.listdir() if s.endswith('.f') or s.endswith('.c') or s.endswith('.z')] or this other way is a little shorter to write:
[s for s in os.listdir() if s.rpartition('.')[2] in ('f','c','z')] 6 Comments
Mike DeSimone
There are a lot of things that are explicit function calls in other languages that are replaced by built-in operations in Python. It's tricky keeping track sometimes. For example, the various adapter templates in C++ standard library are simply
lambda in Python. It's one of my favorite things about Python.Ned Batchelder
"Don't ask" means "don't ask me, 'did you check the documentation, what did it say?'"
David Z
@Ned: I kind of figured that, it was a half-rhetorical question.
Enno Gröper
[s in os.listdir() if s.endswith('.f')] results in a syntax error here using Python 2.7. [s for s in os.listdir('.') if s.endswith('.f')] worksq-compute
Just wondering, what is "s" supposed to be here? I tried the code for myself and it works but I find it difficult to understand when seemingly arbitrary variable names are used.
|
There is another possibility not mentioned so far:
import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.f'): print file Actually this is how the glob module is implemented, so in this case glob is simpler and better, but the fnmatch module can be handy in other situations, e.g. when doing a tree traversal using os.walk.
Comments
[s for s in os.listdir() if os.path.splitext(s) == 'f'] 1 Comment
Philipp
This should be
os.path.splitext(s)[1] == '.f'.