Sort strings by the first N characters
I have a text file with lines like this:
2010-02-18 11:46:46.1287 bla
2010-02-18 11:46:46.1333 foo
2010-02-18 11:46:46.1333 bar
2010-02-18 11:46:46.1467 bla
A simple sort would swap lines 2 an开发者_JS百科d 3 (bar comes before foo), but I would like to keep lines (that have the same date/time) in their original order.
How can I do this in Python?
sorted(array, key=lambda x:x[:24])
Example:
>>> a = ["wxyz", "abce", "abcd", "bcde"]
>>> sorted(a)
['abcd', 'abce', 'bcde', 'wxyz']
>>> sorted(a, key=lambda x:x[:3])
['abce', 'abcd', 'bcde', 'wxyz']
The built-in sort is stable, so you the effectively-equal values stay in order by default.
import operator
with open('filename', 'r') as f:
sorted_lines = sorted(f, key=operator.itemgetter(slice(0, 24)))
At this point sorted_lines
will be a list of the sorted lines. To replace the old file, make a new file, call new_file.writelines(sorted_lines)
, then move the new file over the old one.
精彩评论