Как отсортировать строку по дате в python? - PullRequest
0 голосов
/ 06 марта 2020

У меня есть этот файл temp.txt:

73.00   1   87  241531  02/06/19    1
95.00   1   87  244012  06/06/19    1
47.00   1   87  447     08/01/13    0
126.00  1   87  242697  08/06/19    1
106.00  1   87  242699  08/06/19    1
94.00   1   87  242293  09/06/19    1
192.00  1   87  242710  09/06/19    1
54.00   1   87  243243  13/06/19    1
106.00  1   87  243421  13/06/19    1

И я хочу отсортировать строки по их датам.

Вот мой код (не работает):

from datetime import datetime
import re


def func():

    temp_file = open("./temp.txt", "w")
    timestamp_regex = re.compile("[^:]+:\d\d:\d\d")

    def convert_time(logline):
        stamp = timestamp_regex.match(logline).group()  # this will error if there's no match.
        d = datetime.strptime(stamp, "%d/%m/%Y")
        return int(d.timestamp())

    temp_file_sorted_lines = sorted(open("./temp.txt", "r").readlines(), key=lambda line: line.split()[4])

    temp_file.close()

Что я делаю не так? как правильно отсортировать строки?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы можете использовать pandas:

import pandas as pd
df=pd.read_csv('file.txt',header=None, sep='\s+')
df['tmp'] = pd.to_datetime(df[4])
df = df.sort_values('tmp')
df.drop('tmp',axis=1,inplace=True)
df.to_csv('file_new.txt',header=False, index=False,sep='\t')

Вывести в новый файл:

47.0    1   87  447 08/01/13    0
73.0    1   87  241531  02/06/19    1
95.0    1   87  244012  06/06/19    1
54.0    1   87  243243  13/06/19    1
106.0   1   87  243421  13/06/19    1
126.0   1   87  242697  08/06/19    1
106.0   1   87  242699  08/06/19    1
94.0    1   87  242293  09/06/19    1
192.0   1   87  242710  09/06/19    1
0 голосов
/ 06 марта 2020

Это один подход с использованием datetime и sorted

Пример:

import datetime

with open(filename) as infile:
    data = sorted([line.split() for line in infile], key=lambda x: datetime.datetime.strptime(x[-2], "%d/%m/%y"))

print(data)

Выход:

[['47.00', '1', '87', '447', '08/01/13', '0'],
 ['73.00', '1', '87', '241531', '02/06/19', '1'],
 ['95.00', '1', '87', '244012', '06/06/19', '1'],
 ['126.00', '1', '87', '242697', '08/06/19', '1'],
 ['106.00', '1', '87', '242699', '08/06/19', '1'],
 ['94.00', '1', '87', '242293', '09/06/19', '1'],
 ['192.00', '1', '87', '242710', '09/06/19', '1'],
 ['54.00', '1', '87', '243243', '13/06/19', '1'],
 ['106.00', '1', '87', '243421', '13/06/19', '1']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...