Эта строка делает tot десятичным объектом:
tot = Decimal(data['abd']) - Decimal(data['a'])
Это означает, что его число, например, int или float, не повторяется.
# This code, with tot being a Decimal ...
for x in tot:
pass
# ... is the equivalent of this
for x in 1:
pass
# ... or this
for x in 0.1:
pass
Вероятно, вам нужно:
# Before looping over uts
marks_total = Decimal()
for ut in uts:
# ... after calculating tot
marks_total += tot # Accumulate total of all tot
# After loop
writer.writerow(['', '', '', marks_total])
Если вы хотите перебрать список, вы можете сделать это, но это медленнее и бессмысленно:
# Before loop
all_tots = []
for ut in uts:
# ... after calculating tot
all_tots.append(tot)
# After loop
writer.writerow(['', '', '', sum(all_tots)])