|
import pandas as pd
|
|
import re
|
|
|
|
def clean_csv(input_file, output_file, headers):
|
|
"""
|
|
Lit un fichier CSV, nettoie les données et applique les en-têtes fournis.
|
|
|
|
:param input_file: Chemin du fichier CSV en entrée.
|
|
:param output_file: Chemin du fichier CSV de sortie.
|
|
:param headers: Liste des titres de colonnes.
|
|
"""
|
|
with open(input_file, 'r', encoding='utf-8', errors='ignore') as file:
|
|
lines = file.readlines()
|
|
|
|
# Supprimer la ligne indésirable si elle existe
|
|
unwanted_line = "Test,Entre,Sortie,Statut,Temps (ticks)"
|
|
lines = [line for line in lines if not line.strip().startswith(unwanted_line)]
|
|
|
|
# Nettoyer et séparer les valeurs correctement
|
|
formatted_data = []
|
|
for line in lines:
|
|
line = line.strip()
|
|
line = re.sub(r'\s+', ',', line) # Remplace les espaces multiples par une virgule
|
|
values = line.split(',')
|
|
formatted_data.append(values)
|
|
|
|
# Vérifier le nombre réel de colonnes dans les données
|
|
num_columns = max(len(row) for row in formatted_data)
|
|
|
|
# Ajuster la taille des lignes pour correspondre au nombre de colonnes attendues
|
|
for i in range(len(formatted_data)):
|
|
if len(formatted_data[i]) < num_columns:
|
|
formatted_data[i] += [''] * (num_columns - len(formatted_data[i]))
|
|
|
|
# Vérifier que les en-têtes correspondent au bon nombre de colonnes
|
|
if len(headers) < num_columns:
|
|
headers += [f"Extra_{i+1}" for i in range(num_columns - len(headers))] # Ajouter des colonnes supplémentaires
|
|
print("⚠️ Ajout de colonnes supplémentaires aux en-têtes.")
|
|
|
|
elif len(headers) > num_columns:
|
|
headers = headers[:num_columns] # Tronquer si nécessaire
|
|
|
|
# Créer un DataFrame et sauvegarder
|
|
df = pd.DataFrame(formatted_data, columns=headers)
|
|
df.to_csv(output_file, index=False)
|
|
print(f"✅ Fichier nettoyé et sauvegardé sous {output_file}")
|
|
|
|
# Exemple d'utilisation
|
|
input_csv = "UART_data.csv"
|
|
output_csv = "excel_output.csv"
|
|
headers = ["Tests", "DOUT", "SUP_DCDC_PGOOD", "PS_nDIS_PWM_BIS", "PS_nDIS_PWM", "PMIC_nSS1", "DRV_HS_nFLT1", "DRV_LS_nFLT1", "PS_asc_SEL", "nRESET_LATCHED", "nOC", "PS_nASC",
|
|
"PS_nASC_bis", "DRV_ASC_EN_ISO", "nOC_LATCHED", "nOV_LATCHED", "DRV_ASC_ISO_LS", "DRV_ASC_ISO_HS", "DRV_ASC_EN_ISO_OUT", "nOC_LATCHED_OUT", "nOV_LATCHED_OUT", "DRV_ASC_ISO_LS_OUT", "DRV_ASC_ISO_HS_OUT", "Resultat","Temps"]
|
|
|
|
clean_csv(input_csv, output_csv, headers)
|