How can I check the extension of a file?

I'm working on a certain program where I need to do different things depending on the extension of the file. Could I just use this?

if m == *.mp3 ... elif m == *.flac ... 
1

13 Answers

Assuming m is a string, you can use endswith:

if m.endswith('.mp3'): ... elif m.endswith('.flac'): ... 

To be case-insensitive, and to eliminate a potentially large else-if chain:

m.lower().endswith(('.png', '.jpg', '.jpeg')) 
6

os.path provides many functions for manipulating paths/filenames. (docs)

os.path.splitext takes a path and splits the file extension from the end of it.

import os filepaths = ["/folder/soundfile.mp3", "folder1/folder/soundfile.flac"] for fp in filepaths: # Split the extension from the path and normalise it to lowercase. ext = os.path.splitext(fp)[-1].lower() # Now we can simply use == to check for equality, no need for wildcards. if ext == ".mp3": print fp, "is an mp3!" elif ext == ".flac": print fp, "is a flac file!" else: print fp, "is an unknown file format." 

Gives:

 /folder/soundfile.mp3 is an mp3! folder1/folder/soundfile.flac is a flac file! 
2

Use pathlib From Python3.4 onwards.

from pathlib import Path Path('my_file.mp3').suffix == '.mp3' 
4

Look at module fnmatch. That will do what you're trying to do.

import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print file 

or perhaps:

from glob import glob ... for files in glob('path/*.mp3'): do something for files in glob('path/*.flac'): do something else 

one easy way could be:

import os if os.path.splitext(file)[1] == ".mp3": # do something 

os.path.splitext(file) will return a tuple with two values (the filename without extension + just the extension). The second index ([1]) will therefor give you just the extension. The cool thing is, that this way you can also access the filename pretty easily, if needed!

An old thread, but may help future readers...

I would avoid using .lower() on filenames if for no other reason than to make your code more platform independent. (linux is case sensistive, .lower() on a filename will surely corrupt your logic eventually ...or worse, an important file!)

Why not use re? (Although to be even more robust, you should check the magic file header of each file... How to check type of files without extensions in python? )

import re def checkext(fname): if re.search('\.mp3$',fname,flags=re.IGNORECASE): return('mp3') if re.search('\.flac$',fname,flags=re.IGNORECASE): return('flac') return('skip') flist = ['myfile.mp3', 'myfile.MP3','myfile.mP3','myfile.mp4','myfile.flack','myfile.FLAC', 'myfile.Mov','myfile.fLaC'] for f in flist: print "{} ==> {}".format(f,checkext(f)) 

Output:

myfile.mp3 ==> mp3 myfile.MP3 ==> mp3 myfile.mP3 ==> mp3 myfile.mp4 ==> skip myfile.flack ==> skip myfile.FLAC ==> flac myfile.Mov ==> skip myfile.fLaC ==> flac 
import os source = ['test_sound.flac','ts.mp3'] for files in source: fileName,fileExtension = os.path.splitext(files) print fileExtension # Print File Extensions print fileName # It print file name 

You should make sure the "file" isn't actually a folder before checking the extension. Some of the answers above don't account for folder names with periods. (folder.mp3 is a valid folder name).


Checking the extension of a file:

import os file_path = "C:/folder/file.mp3" if os.path.isfile(file_path): file_extension = os.path.splitext(file_path)[1] if file_extension.lower() == ".mp3": print("It's an mp3") if file_extension.lower() == ".flac": print("It's a flac") 

Output:

It's an mp3 

Checking the extension of all files in a folder:

import os directory = "C:/folder" for file in os.listdir(directory): file_path = os.path.join(directory, file) if os.path.isfile(file_path): file_extension = os.path.splitext(file_path)[1] print(file, "ends in", file_extension) 

Output:

abc.txt ends in .txt file.mp3 ends in .mp3 song.flac ends in .flac 

Comparing file extension against multiple types:

import os file_path = "C:/folder/file.mp3" if os.path.isfile(file_path): file_extension = os.path.splitext(file_path)[1] if file_extension.lower() in {'.mp3', '.flac', '.ogg'}: print("It's a music file") elif file_extension.lower() in {'.jpg', '.jpeg', '.png'}: print("It's an image file") 

Output:

It's a music file 
#!/usr/bin/python import shutil, os source = ['test_sound.flac','ts.mp3'] for files in source: fileName,fileExtension = os.path.splitext(files) if fileExtension==".flac" : print 'This file is flac file %s' %files elif fileExtension==".mp3": print 'This file is mp3 file %s' %files else: print 'Format is not valid' 
if (file.split(".")[1] == "mp3"): print "its mp3" elif (file.split(".")[1] == "flac"): print "its flac" else: print "not compat" 
2

If your file is uploaded then

import os file= request.FILES['your_file_name'] #Your input file_name for your_file_name ext = os.path.splitext(file.name)[-1].lower() if ext=='.mp3': #do something elif ext=='.xls' or '.xlsx' or '.csv': #do something else: #The uploaded file is not the required format 
file='test.xlsx' if file.endswith('.csv'): print('file is CSV') elif file.endswith('.xlsx'): print('file is excel') else: print('none of them') 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like