root-ext-files-unmounted-all-times.log
Mám soubory s množstvím řádků ve formátu (první údaj je čas na prvním řádku):
22:23:14 - /opt/palemoon/updater.ini
a chci to převést na formát a redukovat na výpis jen po jedné vteřině (1 soubor na vteřinu, první řádek je logicky čas 0s):
0:00:00 - /opt/palemoon/updater.ini
import os
import datetime
# Vytvoření složek pro výstupy
os.makedirs("log-times", exist_ok=True)
os.makedirs("directories", exist_ok=True)
# Funkce pro výpočet rozdílu času
def time_diff(start, end):
FMT = "%H:%M:%S"
tdelta = datetime.datetime.strptime(end, FMT) - datetime.datetime.strptime(start, FMT)
return str(tdelta)
# Funkce pro zpracování logů
def process_logs(input_dir):
for log_file in os.listdir(input_dir):
if log_file.endswith(".log"):
with open(os.path.join(input_dir, log_file), 'r') as f:
lines = f.readlines()
# První čas a inicializace proměnných
if lines:
start_time = lines[0].split(" - ")[0]
else:
print(f"Soubor {log_file} je prázdný.")
continue
last_logged_second = None
# Vytvoření souborů pro výstup
output_log_path = os.path.join("log-times", log_file)
reduced_log_path = os.path.join("directories", log_file)
with open(output_log_path, 'w') as log_out, open(reduced_log_path, 'w') as dir_out:
for line in lines:
try:
current_time, path = line.strip().split(" - ", 1)
elapsed_time = time_diff(start_time, current_time)
# Zapisování do logu s rozdílem času
log_out.write(f"{elapsed_time} - {path}\n")
# Zapisování pouze jednoho záznamu na vteřinu
current_second = current_time.split(":")[-1]
if current_second != last_logged_second:
dir_out.write(f"{elapsed_time} - {path}\n")
last_logged_second = current_second
except ValueError as e:
print(f"Chyba při zpracování řádku: '{line.strip()}'. Detail: {e}")
# Spuštění zpracování logů z aktuálního adresáře
process_logs(".")
print("Logy byly úspěšně zpracovány a uloženy do složek 'log-times' a 'directories'.")
Žádné komentáře:
Okomentovat