13

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 5

25

glob is good at this:

import glob for f in glob.glob("*.f"): print(f) 
Sign up to request clarification or add additional context in comments.

2 Comments

+1 wow, that helped a lot! But cant we just do print(glob.glob("*.py")) ?
You can do that, glob.glob returns a list, do what you want with it.
21

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

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.
"Don't ask" means "don't ask me, 'did you check the documentation, what did it say?'"
@Ned: I kind of figured that, it was a half-rhetorical question.
[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')] works
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.
|
2

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

1

Try this:

from os import listdir extension = '.wantedExtension' mypath = r'my\path' filesWithExtension = [ f for f in listdir(mypath) if f[(len(f) - len(extension)):len(f)].find(extension)>=0 ] 

Comments

0
[s for s in os.listdir() if os.path.splitext(s) == 'f'] 

1 Comment

This should be os.path.splitext(s)[1] == '.f'.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.