排序文本文件中的行,但只使用前N个字符

com*_*pie 9 python sorting datetime

我有一个文本文件,其中包含以下行:

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
Run Code Online (Sandbox Code Playgroud)

一个简单的排序会交换第2行和第3行(bar在foo之前),但我想保留原始顺序的行(具有相同的日期/时间).

我怎么能用Python做到这一点?

奖金问题:GNU排序也可以这样做吗?

ken*_*ytm 24

sorted(array, key=lambda x:x[:24])
Run Code Online (Sandbox Code Playgroud)

例:

>>> a = ["wxyz", "abce", "abcd", "bcde"]
>>> sorted(a)
['abcd', 'abce', 'bcde', 'wxyz']
>>> sorted(a, key=lambda x:x[:3])
['abce', 'abcd', 'bcde', 'wxyz']
Run Code Online (Sandbox Code Playgroud)


Mik*_*ham 5

内置排序是稳定的,因此默认情况下,有效相等的值保持有序.

import operator

with open('filename', 'r') as f:
    sorted_lines = sorted(f, key=operator.itemgetter(slice(0, 24)))
Run Code Online (Sandbox Code Playgroud)

此时sorted_lines将是已排序行的列表.要替换旧文件,请创建一个新文件new_file.writelines(sorted_lines),然后调用,然后将新文件移到旧文件上.

  • `s/slice(24,None)/ slice(0,24)/` (2认同)