diff --git a/iis2csv.py b/iis2csv.py new file mode 100644 index 0000000..1a7cf45 --- /dev/null +++ b/iis2csv.py @@ -0,0 +1,49 @@ +# Standard imports +import csv +import sys +import os + +def convert_iis_log_to_csv(iis_log_path): + try: + with open(iis_log_path, 'r', encoding='utf-8') as log_file: + lines = log_file.readlines() + except FileNotFoundError: # Oop, file not found + print(f"Error: File not found: {iis_log_path}") + sys.exit(1) + + # Set up some arrays + field_names = [] + data_lines = [] + + # Read the file + for line in lines: + line = line.strip() + if line.startswith("#Fields:"): # Look for the Fields line in the IIS log and use that to make column headers + field_names = line[len("#Fields:"):].strip().split() + elif line.startswith("#") or not line: + continue # Skip any blank or commented lines + else: + data_lines.append(line.split()) + + if not field_names: # If no Fields line, it'll error, so you really want the Fields line in the file + print("Error: No '#Fields:' line found in the log file.") + sys.exit(1) + + base_name = os.path.splitext(os.path.basename(iis_log_path))[0] + output_csv_path = f"{base_name}.csv" # The CSV will be the same file name as the log file + + # Create the CSV + with open(output_csv_path, 'w', newline='', encoding='utf-8') as csv_file: + writer = csv.writer(csv_file) + writer.writerow(field_names) + writer.writerows(data_lines) + + print(f"Conversion complete. CSV written to: {output_csv_path}") + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: python convert_iis_log.py ") # The most obvious help statement ever + sys.exit(1) + + iis_log_path = sys.argv[1] + convert_iis_log_to_csv(iis_log_path) \ No newline at end of file