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.

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
Post a Comment