Выгрузка в текстовый файл в виде таблицы
Вот мой код:
from prettytable import PrettyTable
def Load():
with open ('w.txt', encoding='utf-8') as file:
v = list(file.read().splitlines())
d=int(v[0])
for i in range(len(v)):
if i == 0:
continue
#Фамилии
elif i % 2 == 1:
sd_name=''
sd_name+=v[i]
#Числа
elif i % 2 == 0:
z = v[i]
x = int(z[0] + z[1])
y = int(z[3] + z[4] + z[5] + z[6])
itogo=''
itogo+=str(x*y)
days=''
days+=str(x)
oklad=''
oklad+=str(y)
Calc(x,y,d,sd_name,days,oklad)
summa=[]
def Calc(x,y,d,sd_name,days,oklad):
zrplt = round(((x*y)/d), 2)
summa.append(zrplt)
it = sum(summa)
Save(zrplt,sd_name,days,oklad,it)
t = PrettyTable()
t.field_names = ["Фамилия", "Дни", "Оклад", "Зарплата"]
def Save(zrplt,sd_name,days,oklad,it):
with open('w2.txt', 'w', encoding='utf-8') as f:
t.add_rows(
[
[str(sd_name),str(days),str(oklad),str(zrplt)]
]
)
t.add_row(["Итого", '','',it])
f.write(str(t))
Load()
Помогите, пожалуйста, решить проблему.
Ответы (1 шт):
На сколько я понял, проблема в том, что строчка Итого пишется после каждого сотрудника вместо того, что-бы писаться единожды, в конце таблицы.
Если это так, то лечение состоит в том, что-бы строчку кода, которая пишет ненужные промежуточные итоги t.add_row(["Итого", '','',it]) убрать из тела функции Save, которую вы вызываете циклически, после обработки данных сотрудника, и перенести связанные с ним действия - в том числе вычисление итоговой суммы и ее запись - в конец функции Load
P.S. Использование глобальными переменными, а тем более их хаотическое определение, перемешивание в коде операторов основной функции и определения вспомогательных функций и тоже в хаотическом порядке - крайне нехорошая практика, затрудняющая как написание кода, так и выявление и исправление ошибок в нем.

