49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
# 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 <iis_log_file>") # The most obvious help statement ever
|
|
sys.exit(1)
|
|
|
|
iis_log_path = sys.argv[1]
|
|
convert_iis_log_to_csv(iis_log_path) |