How to sort file names in a particular order using python

A much better solution is to use Tcl's "lsort -dictionary":

from tkinter import Tcl
Tcl().call('lsort', '-dict', file_list)

Tcl dictionary sorting will treat numbers correctly, and you will get results similar to the ones a file manager uses for sorting files.


As mentioned, files in a directory are not inherently sorted in a particular way. Thus, we usually 1) grab the file names 2) sort the file names by desired property 3) process the files in the sorted order.

You can get the file names in the directory as follows. Suppose the directory is "~/home" then

import os

file_list = os.listdir("~/home")

To sort file names:

#grab last 4 characters of the file name:
def last_4chars(x):
    return(x[-4:])

sorted(file_list, key = last_4chars)   

So it looks as follows:

In [4]: sorted(file_list, key = last_4chars)
Out[4]:
['file_01_001',
 'file_02_002',
 'file_03_003',
 'file_04_004',
 'file_01_005',
 'file_02_006',
 'file_03_007',
 'file_04_008']

To read in and process them in sorted order, do:

file_list = os.listdir("~/home")

for filename in sorted(file_list, key = last_4chars):    
    with open(filename,'rb') as thefile:
        #Do stuff to each file