сортировать строки в текстовом файле, но использовать только первые N символов - PullRequest
9 голосов
/ 18 февраля 2010

У меня есть текстовый файл со строками вроде этого:

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 (строка идет перед foo), но я хотел бы сохранить строки (которые имеют одинаковыедата / время) в их первоначальном порядке.

Как я могу сделать это в Python?

Дополнительный вопрос: может ли сортировка GNU также сделать это?

Ответы [ 2 ]

24 голосов
/ 18 февраля 2010
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']
5 голосов
/ 18 февраля 2010

Встроенная сортировка стабильна, поэтому по умолчанию равные значения остаются в порядке.

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), затем переместите новый файл поверх старого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...