#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import csv import os import sys def generate_csv_from_json(json_file, model_name=None): """ Génère un fichier CSV à partir des données du tableau questions/réponses contenues dans le fichier JSON du rapport. Args: json_file (str): Chemin du fichier JSON contenant les données model_name (str, optional): Nom du modèle à inclure dans le nom du fichier Returns: str: Chemin du fichier CSV généré """ # Extraire l'ID du ticket du nom du fichier ticket_id = os.path.basename(json_file).split('_')[0] # Créer le répertoire CSV à la racine du projet project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) csv_root_dir = os.path.join(project_root, 'CSV') ticket_csv_dir = os.path.join(csv_root_dir, ticket_id) # Créer les répertoires si nécessaire os.makedirs(ticket_csv_dir, exist_ok=True) # Définir le nom du fichier CSV de sortie if model_name: csv_file = os.path.join(ticket_csv_dir, f"{ticket_id}_{model_name}.csv") else: # Si le modèle n'est pas spécifié, utiliser les métadonnées du JSON with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) model_name = data.get('metadata', {}).get('model', 'unknown') csv_file = os.path.join(ticket_csv_dir, f"{ticket_id}_{model_name}.csv") # Ouvrir le fichier JSON with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) # Extraire les échanges exchanges = data.get('chronologie_echanges', []) if not exchanges: print(f"Aucun échange trouvé dans {json_file}") return None # Ouvrir le fichier CSV pour écriture with open(csv_file, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # Écrire l'en-tête writer.writerow(['Question', 'Réponse']) current_question = None current_answers = [] # Parcourir les échanges pour les combiner en paires questions/réponses for exchange in exchanges: emetteur = exchange.get('emetteur', '').upper() type_msg = exchange.get('type', '').lower() contenu = exchange.get('contenu', '') # Si c'est une question client if emetteur == 'CLIENT' and (type_msg == 'question' or '?' in contenu): # Si une question précédente existe, l'écrire avec ses réponses if current_question: combined_answer = "\n".join(current_answers) if current_answers else "Pas de réponse" writer.writerow([current_question, combined_answer]) # Réinitialiser pour la nouvelle question current_question = contenu current_answers = [] # Si c'est une réponse ou un complément du support elif emetteur == 'SUPPORT' and (type_msg == 'réponse' or type_msg == 'complément visuel' or type_msg == 'information technique'): if current_question: # S'assurer qu'il y a une question en cours # Ajouter le contenu sans préfixe current_answers.append(contenu) # Écrire la dernière question et ses réponses if current_question: combined_answer = "\n".join(current_answers) if current_answers else "Pas de réponse" writer.writerow([current_question, combined_answer]) print(f"Fichier CSV créé: {csv_file}") return csv_file if __name__ == "__main__": # Vérifier si un chemin de fichier est fourni en argument if len(sys.argv) > 1: json_file = sys.argv[1] else: print("Erreur: Veuillez spécifier le chemin du fichier JSON.") print("Usage: python csv_exporter.py chemin/vers/rapport_final.json [nom_modele]") sys.exit(1) # Vérifier si un nom de modèle est fourni en second argument model_name = sys.argv[2] if len(sys.argv) > 2 else None # Générer le CSV generate_csv_from_json(json_file, model_name)