ordered with glob.glob in python

10,931

You can use a special key function for your sort.

sorted(files, key=lambda name: int(name[4:-4]))

What this does is, it takes the filename, e.g. foo_100.txt, strips away the first 4 and last 4 characters, converts the rest to an int, and sorts by those values.

Of course, this only works if all the files have the same prefix and extension, and you may have to use different numbers for other file names. Alternatively, you can use the split method of string or a regular expression to extract the numeric part in the key function.

Share:
10,931
Gianni Spear
Author by

Gianni Spear

Updated on July 11, 2022

Comments

  • Gianni Spear
    Gianni Spear almost 2 years

    I have a list of file:

    foo_00.txt
    foo_01.txt
    foo_02.txt
    foo_03.txt
    foo_04.txt
    foo_05.txt
    foo_06.txt
    foo_07.txt
    foo_08.txt
    foo_09.txt
    foo_10.txt
    foo_11.txt
    .........
    .........
    foo_100.txt
    foo_101.txt
    

    when i use

    import glob
    PATH = "C:\testfoo"
    listing = glob.glob(os.path.join(PATH, '*.txt'))
    

    i have this order

        foo_00.txt
        foo_01.txt
        foo_02.txt
        foo_03.txt
        foo_04.txt
        foo_05.txt
        foo_06.txt
        foo_07.txt
        foo_08.txt
        foo_09.txt
        foo_100.txt
        foo_101.txt
        .........
        .........
        foo_10.txt
        foo_11.txt
        .........
    

    i tried also sorted(glob.glob(os.path.join(PATH, '*.txt'))) but without resolve my problem because I wish to have the right sequence. After foo_09.txt i wish to import foo_10.txt and not foo_100.txt and so on.