Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按前N个字符对字符串排序_Python_String_Sorting - Fatal编程技术网

Python 按前N个字符对字符串排序

Python 按前N个字符对字符串排序,python,string,sorting,Python,String,Sorting,我有一个文本文件,其中的行如下: 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中实现这一点 sorted(array, key=lambda x:x[:24]) 例如: >&g

我有一个文本文件,其中的行如下:

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中实现这一点

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']

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

import operator

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

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

s/slice(24,无)/slice(0,24)/
@J.F.塞巴斯蒂安,谢谢,我误读了这个问题(并认为它与标题冲突)。而且,你的正则表达式是错误的请注意,这会将日期/时间排序为字符串。在这种情况下,这正好起作用。否则,您可能需要使用更智能的键函数来解析日期/时间。