у меня есть код, который обезличивает данные, пересчитывает даты в данных и записывает в файл запроса полученные данные. но он выполняется в три шага, для чего создаются промежуточные файлы. мне нужно задействовать по минимум памяти, чтобы произвести те же действия, поскольку память ограничена а данных много. перепиши код в один цельный, не убирай ничего из функционала.
# Обезличивание данных
SetForOpen = r"rr2_ref_data20240910.csv"
SetForSave = r"rr2_ref_data20240910_anonymous.csv"

if os.path.exists(SetForSave):
    os.remove(SetForSave)

num_client = 0
hd_flag = True
inn_dict = {}

def replace_inn(inn, num_client):
    if len(inn) == 10:
        inn_repl = ('000000000' + str(num_client))[-10:]
        while int(inn_repl[9]) != (2 * int(inn_repl[0]) + 4 * int(inn_repl[1]) + 10 * int(inn_repl[2]) +
                                   3 * int(inn_repl[3]) + 5 * int(inn_repl[4]) + 9 * int(inn_repl[5]) +
                                   4 * int(inn_repl[6]) + 6 * int(inn_repl[7]) + 8 * int(inn_repl[8])) % 11 % 10:
            num_client += 1
            inn_repl = ('000000000' + str(num_client))[-10:]
        return inn_repl, num_client
    elif len(inn) == 12:
        inn_repl = ('00000000000' + str(num_client))[-12:]
        while (int(inn_repl[10]) != (7 * int(inn_repl[0]) + 2 * int(inn_repl[1]) + 4 * int(inn_repl[2]) +
                                     10 * int(inn_repl[3]) + 3 * int(inn_repl[4]) + 5 * int(inn_repl[5]) +
                                     9 * int(inn_repl[6]) + 4 * int(inn_repl[7]) + 6 * int(inn_repl[8]) +
                                     8 * int(inn_repl[9])) % 11 % 10) or (int(inn_repl[11]) != (3 * int(inn_repl[0]) + 7 * int(inn_repl[1]) + 2 * int(inn_repl[2]) +
                                       4 * int(inn_repl[3]) + 10 * int(inn_repl[4]) + 3 * int(inn_repl[5]) +
                                       5 * int(inn_repl[6]) + 9 * int(inn_repl[7]) + 4 * int(inn_repl[8]) +
                                       6 * int(inn_repl[9]) + 8 * int(inn_repl[10])) % 11 % 10):
            num_client += 1
            inn_repl = ('00000000000' + str(num_client))[-12:]
        return inn_repl, num_client
    else:
        return None, num_client

for chunk in tqdm(pd.read_csv(SetForOpen, sep=',', nrows=None, chunksize=10000, dtype={'inn': str})):
    for i, row in chunk.iterrows():
        request_json = json.loads(row['inparams'])
        
        num_client += 1
        inn_find = request_json['org_data']['inn']
        inn_repl, num_client = replace_inn(inn_find, num_client)
        inn_dict[row['chain_sid']] = [inn_find, inn_repl]

        chunk.at[i, 'inn'] = inn_repl
        chunk.at[i, 'inparams'] = chunk.at[i, 'inparams'].replace(inn_find, inn_repl)

        epk_find = request_json['org_data']['client_id_list'][0]['client_id']
        inparams_updated = chunk.at[i, 'inparams']
        if epk_find != '0':
            inparams_updated = inparams_updated.replace('"' + epk_find + '"', '"client_id"')

        inparams_updated = inparams_updated.replace('"' + request_json['org_data']['deal_id_list'][0]['deal_id'] + '"', '"deal_id"')
        
        chunk.at[i, 'inparams'] = inparams_updated

    chunk.to_csv(SetForSave, sep=',', encoding='utf-8', mode='a', index=False, header=hd_flag)
    hd_flag = False

# Выгрузка данных, пересчет дат и очистка
data = []
initial_dates = []

file_name = 'rr2_ref_data20240910_anonymous.csv'

with open(file_name, 'r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in tqdm(csv_reader):
        clean_row = {k: v for k, v in row.items() if k in ('inn', 'inparams')}
        
        try:
            exec_time = datetime.strptime(row['exec_time'], '%Y-%m-%d %H:%M:%S.%f')
        except ValueError:
            exec_time = datetime.strptime(row['exec_time'], '%Y-%m-%d %H:%M:%S')
        
        is_reg = json.loads(row['inparams'])['quality_factors'].get('reg_date')
        is_dbo = json.loads(row['inparams'])['quality_factors'].get('dbo_date')
        
        clean_row['inparams'] = json.loads(clean_row['inparams'])
        
        old_dates = {}
        old_dates['chain_sid'] = row['chain_sid']
        if is_reg or is_dbo:
            if is_reg:
                reg_date = datetime.strptime(is_reg, '%Y-%m-%d')
                delta_reg = exec_time - reg_date 
                reg_date_recalc = datetime.now() - delta_reg
                clean_row['inparams']['quality_factors']['reg_date'] = datetime.strftime(reg_date_recalc, '%Y-%m-%d')
            
            if is_dbo:
                dbo_date = datetime.strptime(is_dbo, '%Y-%m-%d')
                delta_dbo = exec_time - dbo_date
                dbo_date_recalc = datetime.now() - delta_dbo
                clean_row['inparams']['quality_factors']['dbo_date'] = datetime.strftime(dbo_date_recalc, '%Y-%m-%d') 
        
        old_dates['reg_date'] = datetime.strftime(reg_date, '%Y-%m-%d') if is_reg else None
        old_dates['dbo_date'] = datetime.strftime(dbo_date, '%Y-%m-%d') if is_dbo else None
        
        initial_dates.append(old_dates)

        clean_row['inparams'] = json.dumps(clean_row['inparams'], ensure_ascii=False)
     
        data.append(clean_row)

# Запись данных в файлы json 
with open(f'rr2_requests{current_date}.csv', 'w', encoding='utf-8') as file:
    file.write('paramsStrategy\n')
    for unit in tqdm(data):
        file.write(unit['inparams'] + '\n')