按前N个字符排序字符串

9 投票
2 回答
9491 浏览
提问于 2025-04-15 19:26

我有一个文本文件,里面的内容像这样:

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

如果简单排序的话,会把第2行和第3行的位置互换(因为“bar”在“foo”前面),但我希望那些有相同日期和时间的行能保持原来的顺序。

我该如何在Python中实现这个呢?

2 个回答

5

内置的排序功能是稳定的,这意味着那些值相等的项在排序后会保持原来的顺序。

import operator

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

到这个时候,sorted_lines 就是一个已经排序好的行的列表。要替换掉旧文件,你需要先创建一个新文件,然后用 new_file.writelines(sorted_lines) 把排序好的内容写入新文件,最后再把新文件替换掉旧文件。

26
sorted(array, key=lambda x:x[:24])

示例:

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

撰写回答