blob: c22bc9e1aedbb97161e61bffdd2c0d5d9511d6ea [file] [edit]
#!/bin/python3
import argparse
import os
import csv
import time
def parse_arguments():
parser = argparse.ArgumentParser(description='Record data and calculate statistics.')
parser.add_argument('--data', type=float, required=True, help='The data value to record.')
parser.add_argument('--log-file', type=str, required=True, help='The file to log data to.')
parser.add_argument('--label', type=str, required=True, help='The label for the data.')
parser.add_argument('--time-stamp', type=str, required=False, help='The timestamp for the data.')
args = parser.parse_args()
return args
def read_existing_data(file_name):
data = []
if os.path.exists(file_name) and os.path.getsize(file_name) > 0:
with open(file_name, 'r') as file:
reader = csv.reader(file)
for row in reader:
if row and row[2].strip():
try:
data.append(float(row[2].strip()))
except ValueError:
continue
return data
def calculate_average(data):
if not data:
return 0.0
non_zero_data = [d for d in data if d != 0]
if len(non_zero_data) == 0:
return 0.0
if len(non_zero_data) > 10:
non_zero_data = non_zero_data[-10:]
return sum(non_zero_data) / len(non_zero_data)
def calculate_percentage_difference(new_value, average):
if average == 0:
return 0.0
return ((new_value - average) / average) * 100
def append_data(file_name, time_stamp, label, data):
with open(file_name, 'a', newline='') as file:
writer = csv.writer(file)
writer.writerow([time_stamp, label, data])
def main():
args = parse_arguments()
data = args.data
log_file = args.log_file
label = args.label
time_stamp = args.time_stamp if args.time_stamp else time.strftime("%Y-%m-%d %H:%M:%S")
existing_data = read_existing_data(log_file)
if not existing_data:
average = data
percentage_diff = 0.0
else:
average = calculate_average(existing_data)
percentage_diff = calculate_percentage_difference(data, average)
append_data(log_file, time_stamp, label, data)
print(f"Average of the last 10 non-zero data points: {average:.3g}")
print(f"Percentage difference from current data: {percentage_diff:.2f}%")
if __name__ == "__main__":
main()