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