Ev2geny
Таким образом мне нужна именно одна функция, которая выполняет весь функционал.
Нет. Сделайте вот так
def run():
input_file_name = sys.argv[1]
output_file_name = sys.argv[2]
raw_data = read_data(file_name)
parsed_data = parse_data(data)
...
save_data(output_file_name)
У вас появится возможность импортировать запускалку, но у вас останется возможность:
1) тестировать каждый компонент как отдельную сущность (читать про юнит-тестирование)
2) локализовать баги согласно их принадлежности к функционалу конкретного компонента
3) держать код предельно ясным. Мне, человеку читающему вашу программу непонятно что именно делает на каждом шаге ваша суперфункция. Более того, есть такой закон
https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_%D1%81%D0%B5%D0%BC%D1%8C_%D0%BF%D0%BB%D1%8E%D1%81-%D0%BC%D0%B8%D0%BD%D1%83%D1%81_%D0%B4%D0%B2%D0%B0, который ограничевает количество сущностей, которыми человек одновременно оперирует. Абстракции нужны, чтобы уменьшить количество объектов внимания.
я понимаю, что происходит
parser = Parser()
data = parser.parse()
transformer = Transformer()
transformed_data = transformer(data)
saver = Saver()
saver.save_data(transformed_data )
я не понимаю что происходит
result['operation_date']=line_parts[0]
result['description']=line_parts[1]
result['value_account_currency']=utils.get_float_from_money(line_parts[2],True)
result['remainder_account_currency']=utils.get_float_from_money(line_parts[3])
#************* looking at lines between 1st and the last
sublines=lines[1:-1]
for line in sublines:
line_parts=utils.split_Sberbank_line(line)
if len(line_parts)!=1:
raise exceptions.SberbankPDFtext2ExcelError("Line is expected to have only one part :"+line)
result['description']=result['description']+' '+line_parts[0]
я тупой, мне надо много времени, чтобы понять, в каком конкретно месте вашей программы происходит запись данных в эксель. Потому что я не вижу компонента, который за это отвечает. Поймите, что для того чтобы внести изменения в программу, надо понимать в каком месте это делается. Не продираться через горы каких-то циклов и непонятно чего, надо прочитать из каких модлулей состоит программа, найти класс Saver и его метод save. Изменения, которые я сделаю в этом методе не повлияют на все остальное. Я не знаю, что случится с вашей программой, если я изменю один байт в ней. Это может повлиять на чтение файла, на логику преобразования данных, на запись данных. Я знаю, что я поломаю, если я внесу изменения в метод save класса Saver.
Ev2geny
Для вашего подхода нужна функциональность глобальных переменных, значит надо будет делать объект, а это муторно.
Не понял. В каком месте вы увидели глобальные переменные. За глобальные переменные надо уши отрезать.
Ev2geny
предполагает, что одна функция получает на вход результаты работы другой.
Все программы строятся на этом принципе, только если вы не пишите на ассемблере.