Untitled
unknown
plain_text
4 months ago
4.0 kB
2
Indexable
import os import pandas as pd from datetime import datetime, timedelta class FileConcatenator: def __init__(self, input_folder, output_file, start_date, days_to_process, scenario_number_start): self.input_folder = input_folder self.output_file = output_file self.start_date = datetime.strptime(start_date, "%Y-%m-%d") self.days_to_process = days_to_process self.scenario_number_start = scenario_number_start def generate_weekdays(self): weekdays = [] current_date = self.start_date while len(weekdays) < self.days_to_process: if current_date.weekday() < 5: # Monday to Friday weekdays.append(current_date.strftime("%Y%m%d")) current_date -= timedelta(days=1) return weekdays def process_files(self): file_dates = self.generate_weekdays() concatenated_data = [] files_processed = 0 # Contador para asegurar que procesamos exactamente 521 archivos for i, file_date in enumerate(file_dates): if files_processed >= self.days_to_process: # Si ya hemos procesado 521 archivos, salimos del bucle break scenario_number = self.scenario_number_start - i # Buscar ficheros con la fecha en el nombre matching_files = [f for f in os.listdir(self.input_folder) if file_date in f] if not matching_files: # Si no se encuentran archivos para la fecha print(f"Fecha no incluida, verificar si es festivo: {file_date}") continue # Pasar a la siguiente fecha si no se encuentra archivo for file in matching_files: file_path = os.path.join(self.input_folder, file) # Leer el fichero como CSV df = pd.read_csv(file_path, sep='\t', engine='python') # Seleccionar y renombrar las columnas según las equivalencias processed_data = df.assign( **{ 'Scenario Number': scenario_number, 'Instrument Label': df['DISPLAYED'], 'Market Label': df['MARKET'], 'Maturity Label': '', 'Quotation Mode': 'YIELD', 'Shift Type': 'Std', 'Shift Value': df['YIELD'], 'Initial Value': '', 'Router': '' } ) # Seleccionar solo las columnas necesarias processed_data = processed_data[[ 'Scenario Number', 'Instrument Label', 'Market Label', 'Maturity Label', 'Quotation Mode', 'Shift Type', 'Shift Value', 'Initial Value', 'Router' ]] # Añadir al conjunto de datos concatenados concatenated_data.append(processed_data) files_processed += 1 # Incrementar el contador de archivos procesados # Si ya hemos procesado 521 archivos, salimos del bucle if files_processed >= self.days_to_process: break return concatenated_data def save_to_csv(self, concatenated_data): final_df = pd.concat(concatenated_data, ignore_index=True) final_df.to_csv(self.output_file, index=False, sep='|') print(f"Proceso completado. Archivo concatenado guardado en {self.output_file}") # Parámetros iniciales input_folder = r'C:\Users\x528785\Downloads\OneDrive_1_13-12-2024' output_file = r'C:\Users\x528785\Downloads\concatenated_file.csv' start_date = "2024-11-29" days_to_process = 521 scenario_number_start = 4.565 # Ejecutar la clase concatenator = FileConcatenator(input_folder, output_file, start_date, days_to_process, scenario_number_start) data = concatenator.process_files() concatenator.save_to_csv(data)
Editor is loading...
Leave a Comment