py.Net.JS Ответов: 0

Как найти самую старую дату в текстовом файле для конкретного значения ключа с помощью Python


Я написал программу для извлечения следующих данных из файла журнала. Он имеет дату и ключевое значение. Основываясь на значении ключа, я хочу извлечь самую старую дату для каждого ключа.

2017-03-18 , INBIOS_ABZ824
2017-03-19 , INBIOS_ABZ824
2017-03-12 , INDROS_MSR656
2017-03-17 , INDROS_MSR656
2017-04-12 , INOS_GSN848
2017-04-19 , INOS_GSN848

каким должен быть наилучший подход? не могли бы вы предложить?

конечный результат должен быть похож на тот, что приведен ниже,

2017-03-18 , INBIOS_ABZ824
2017-03-12 , INDROS_MSR656
2017-04-12 , INOS_GSN848

Пожалуйста, поделитесь своими мыслями.

Что я уже пробовал:

import os
import re

# Regex used to match relevant loglines (in this case, a specific IP address)
line_regex = re.compile(r"error", re.IGNORECASE)

line_regex = re.compile(r"[A-Z]+OS_[A-Z]+[0-9]+", re.IGNORECASE)


# Output file, where the matched loglines will be copied to
output_filename = os.path.normpath("output.log")
# Overwrites the file, ensure we're starting out with a blank file
with open(output_filename, "w") as out_file:
    out_file.write("")

# Open output file in 'append' mode
with open(output_filename, "a") as out_file:
    # Open input file in 'read' mode
    with open("ServerError.txt", "r") as in_file:
        # Loop over each log line
        for line in in_file:
            # If log line matches our regex, print to console, and output file
            if (line_regex.search(line)):

                # Get index of last space
                last_ndx = line.rfind(' ')
                # line[:23]: The time stamp (first 23 characters)
                # line[last_ndx:]: Last space and following characters

                # using match object to eliminate other strings which are associated with the pattern ,
                # need the string from which the request ID is in the last index
                matchObj = re.match(line_regex, line[last_ndx+1:])
                #print(matchObj)
                #check if matchobj is not null
                if matchObj:
                    print(line[:23] + line[last_ndx:])
                    out_file.write(line[:23] + line[last_ndx:])

Richard MacCutchan

Я бы считывал данные в какую-нибудь форму списка или словаря, используя значение ключа в качестве ключа. Затем вы можете проанализировать дату для каждого ключа и сравнить ее с текущим значением. Если новая дата меньше существующей, замените значение в записи списка. Затем, когда вы обработали все записи, вы можете распечатать их.

0 Ответов