Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- This script formats a log file of thread messages into a table.
- Usage:
- python format_logs.py <log_file.txt>
- Example:
- log_file.txt containing messages in format '[threadName](space)message':
- [0] Start
- [1] I am from thread one
- [2] I am from thread two
- [2] I am also two
- [3] Three!
- [1] Lorem
- [1] Ipsum
- [1] Dolor
- [3] Some
- [2] Another message
- [1] Delivered
- [0] End
- $ python format_logs.py log_file.txt
- +----+-------+----------------------+----------------------+--------+
- | # | [0] | [1] | [2] | [3] |
- +----+-------+----------------------+----------------------+--------+
- | 1 | Start | | | |
- | 2 | | I am from thread one | | |
- | 3 | | | I am from thread two | |
- | 4 | | | I am also two | |
- | 5 | | | | Three! |
- | 6 | | Lorem | | |
- | 7 | | Ipsum | | |
- | 8 | | Dolor | | |
- | 9 | | | | Some |
- | 10 | | | Another message | |
- | 11 | | Delivered | | |
- | 12 | End | | | |
- +----+-------+----------------------+----------------------+--------+
- """
- import sys
- import re
- if len(sys.argv) == 1:
- print(f"Usage: python {sys.argv[0]} <log_file.txt>\n")
- sys.exit()
- log_file_path = sys.argv[1]
- try:
- with open(log_file_path, 'r') as f:
- input_logs = f.read()
- except FileNotFoundError:
- print(f"Error: File '{log_file_path}' not found")
- sys.exit()
- # extract thread names and messages from input logs
- logs = []
- for line in input_logs.split("\n"):
- match = re.match(r"(\[.+\])\s(.+)", line)
- if match:
- logs.append({
- "thread": match.group(1),
- "message": match.group(2)
- })
- # create a list of dictionaries to represent the table
- table = []
- for i, log in enumerate(logs):
- row = {"#": i+1, log["thread"]: log["message"]}
- for log2 in logs[i+1:]:
- if log2["thread"] not in row:
- row[log2["thread"]] = ""
- table.append(row)
- # find maximum message length for each column
- max_lengths = {key: len(key) for key in table[0].keys()}
- for row in table:
- for key, value in row.items():
- max_lengths[key] = max(max_lengths[key], len(str(value)))
- # print the table header
- row_str = "| {:<{}} |".format("#", max_lengths["#"])
- for key, value in max_lengths.items():
- if key != "#":
- row_str += " {:<{}} |".format(key, value)
- separator = "+" + "-" * (max_lengths["#"]+2)
- for key, value in max_lengths.items():
- if key != "#":
- separator += "+" + "-" * (value+2)
- print(separator + "+")
- print(row_str)
- print(separator + "+")
- # print the table rows
- for row in table:
- row_str = "| {:<{}} |".format(row["#"], max_lengths["#"])
- for key, value in max_lengths.items():
- if key != "#":
- row_str += " {:<{}} |".format(row.get(key, ""), value)
- print(row_str)
- print(separator + "+")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement