python - How to sort files in linux by number? -


my program reads in number parsed file name. want ordered how is, but, in example, list 500, 4000, 7000. how should naming convention achieve this? is, when have incrementing numbers, lists smallest highest.

what want sort rank, (which here starts @ zero), sorts incrementing numbers.. 500, 5000, 7000.

enter image description here

desired output

log-rank-0-die-10-delay-500.txt log-rank-0-die-10-delay-4000.txt log-rank-0-die-10-delay-7000.txt log-rank-1-die-10-delay-500.txt log-rank-1-die-10-delay-4000.txt log-rank-1-die-10-delay-7000.txt log-rank-2-die-10-delay-500.txt log-rank-2-die-10-delay-4000.txt log-rank-2-die-10-delay-7000.txt 

relevant code

for filenamelogs in sorted(os.listdir(log_directory)):             each_line in filenamelogs:                    #various file parsing activity 

i'm appending data file-by-file various arrays. unfortunately, terrible me if can't sort file reads in order requested. maybe question veered toward developing custom method read in files under sorting constraints provide.

from comment on blog linked in blog:

>>> import re >>> def sort_nicely(l): ...     """ ...     sort given list in way humans expect. modifies original list. ...     """ ...     convert = lambda text: int(text) if text.isdigit() else text ...     alphanum_key = lambda key: [convert(c) c in re.split('([0-9]+)', key)] ...     l.sort(key=alphanum_key) ... >>> mylist = ['log-rank-0-die-10-delay-500.txt', ... 'log-rank-0-die-10-delay-4000.txt', ... 'log-rank-0-die-10-delay-7000.txt', ... 'log-rank-1-die-10-delay-500.txt', ... 'log-rank-1-die-10-delay-4000.txt', ... 'log-rank-1-die-10-delay-7000.txt', ... 'log-rank-2-die-10-delay-500.txt', ... 'log-rank-2-die-10-delay-4000.txt', ... 'log-rank-2-die-10-delay-7000.txt'] >>> sort_nicely(mylist) >>> print(*mylist, sep='\n') log-rank-0-die-10-delay-500.txt log-rank-0-die-10-delay-4000.txt log-rank-0-die-10-delay-7000.txt log-rank-1-die-10-delay-500.txt log-rank-1-die-10-delay-4000.txt log-rank-1-die-10-delay-7000.txt log-rank-2-die-10-delay-500.txt log-rank-2-die-10-delay-4000.txt log-rank-2-die-10-delay-7000.txt 

to return new, sorted list instead of modifying original 1 in place:

>>> def sort_nicely(l): ...     """ ...     sort given list in way humans expect. returns new list. ...     """ ...     convert = lambda text: int(text) if text.isdigit() else text ...     alphanum_key = lambda key: [convert(c) c in re.split('([0-9]+)', key)] ...     return sorted(l, key=alphanum_key) ... >>> newlist = sort_nicely(mylist) >>> print(*newlist, sep='\n') 

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -