Project

General

Profile

1 1658 aaronmk
#!/usr/bin/env python
2
# Sorts a list of filenames, comparing embedded numbers numerically instead of
3
# lexicographically. This will sort e.g. "a.2" after "a.10" instead of before.
4
# Usage: self [filename...] >sorted_list
5
6
import re
7
import sys
8
9
def str2tuple(str_):
10
    parts = re.split(r'(\d+)', str_)
11
    for i, part in enumerate(parts):
12
        if i % 2 == 1: # every other part is a delimeter match = a number
13
            parts[i] = int(part)
14
    parts.append('') # padding to ignore original str (added below) when sorting
15
    parts.append(str_) # save original str for easy conversion back to str
16
    return tuple(parts)
17
18
def tuple2str(tuple_): return tuple_[-1]
19
20
def main():
21
    filenames = map(str2tuple, sys.argv[1:])
22
    filenames.sort()
23
    for filename in map(tuple2str, filenames): sys.stdout.write(filename+'\n')
24
25
main()