Aller au contenu principal

Traiter des données : CSV, Excel, images

Traiter des donnees : CSV, Excel, images

Code Interpreter excelle dans le traitement de fichiers. Uploadez un CSV, un Excel ou une image, et le modele ecrit le code Python pour les analyser, les transformer et produire des resultats exploitables.

Traitement de fichiers CSV

Analyse exploratoire

from openai import OpenAI

client = OpenAI()

with open("clients_2025.csv", "rb") as f:
    fichier = client.files.create(file=f, purpose="assistants")

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "Analyse ce fichier CSV : "
                "1. Nombre de lignes et colonnes "
                "2. Types de donnees de chaque colonne "
                "3. Valeurs manquantes par colonne "
                "4. Statistiques descriptives des colonnes numeriques "
                "5. Les 5 premieres lignes"
            )},
            {"type": "input_file", "file_id": fichier.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}]
)

print(response.output_text)

Nettoyage et transformation

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "Nettoie ce CSV : "
                "- Supprime les doublons "
                "- Remplis les valeurs manquantes (mediane pour les nombres, "
                "  mode pour les categories) "
                "- Normalise les noms de villes (majuscule initiale) "
                "- Convertis les dates au format ISO "
                "- Exporte le resultat en CSV nettoye"
            )},
            {"type": "input_file", "file_id": fichier.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}]
)

# Recuperer le fichier nettoye
for item in response.output:
    if item.type == "code_interpreter_call":
        for result in item.results:
            if hasattr(result, "files"):
                for f in result.files:
                    contenu = client.files.content(f.file_id)
                    with open("clients_nettoye.csv", "wb") as out:
                        out.write(contenu.read())

Traitement de fichiers Excel

Code Interpreter gere nativement les fichiers Excel grace a openpyxl :

with open("budget_2026.xlsx", "rb") as f:
    fichier_excel = client.files.create(file=f, purpose="assistants")

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "Ce fichier Excel contient plusieurs onglets. "
                "1. Liste tous les onglets disponibles "
                "2. Pour chaque onglet, donne un resume du contenu "
                "3. Fais un tableau croise dynamique : total des depenses "
                "   par departement et par trimestre "
                "4. Exporte le resultat dans un nouveau fichier Excel"
            )},
            {"type": "input_file", "file_id": fichier_excel.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}]
)

Fusionner plusieurs fichiers

# Upload de plusieurs fichiers
fichiers_ids = []
for nom in ["ventes_q1.xlsx", "ventes_q2.xlsx", "ventes_q3.xlsx", "ventes_q4.xlsx"]:
    with open(nom, "rb") as f:
        fichier = client.files.create(file=f, purpose="assistants")
        fichiers_ids.append(fichier.id)

content = [
    {"type": "text", "text": (
        "Ces 4 fichiers Excel contiennent les ventes par trimestre. "
        "Fusionne-les en un seul fichier avec : "
        "- Un onglet 'Donnees' avec toutes les ventes "
        "- Un onglet 'Resume' avec les totaux par trimestre "
        "- Un onglet 'Tendances' avec les variations d'un trimestre a l'autre"
    )}
]
for fid in fichiers_ids:
    content.append({"type": "input_file", "file_id": fid})

response = client.responses.create(
    model="gpt-5.3",
    input=[{"role": "user", "content": content}],
    tools=[{"type": "code_interpreter"}]
)

Traitement d’images

Code Interpreter peut manipuler des images avec Pillow :

Analyse et transformation

with open("photo_produit.jpg", "rb") as f:
    fichier_image = client.files.create(file=f, purpose="assistants")

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "Analyse cette image : "
                "1. Dimensions, format, taille "
                "2. Histogramme des couleurs "
                "3. Cree 3 versions : "
                "   - Miniature 200x200 "
                "   - Version noir et blanc "
                "   - Version avec contraste augmente de 30%"
            )},
            {"type": "input_file", "file_id": fichier_image.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}]
)

Traitement par lot

# Upload de plusieurs images
images_ids = []
for img_path in ["img1.png", "img2.png", "img3.png"]:
    with open(img_path, "rb") as f:
        fichier = client.files.create(file=f, purpose="assistants")
        images_ids.append(fichier.id)

content = [
    {"type": "text", "text": (
        "Redimensionne toutes ces images a 800x600 pixels, "
        "ajoute un filigrane 'BROUILLON' en demi-transparent, "
        "et compresse en JPEG qualite 85."
    )}
]
for fid in images_ids:
    content.append({"type": "input_file", "file_id": fid})

response = client.responses.create(
    model="gpt-5.3",
    input=[{"role": "user", "content": content}],
    tools=[{"type": "code_interpreter"}]
)

Pattern : pipeline ETL complet

def pipeline_etl(fichier_source: str, transformations: str) -> dict:
    """Pipeline Extract-Transform-Load avec Code Interpreter."""
    # Extract : upload du fichier source
    with open(fichier_source, "rb") as f:
        fichier = client.files.create(file=f, purpose="assistants")

    # Transform : appliquer les transformations
    response = client.responses.create(
        model="gpt-5.3",
        input=[{
            "role": "user",
            "content": [
                {"type": "text", "text": transformations},
                {"type": "input_file", "file_id": fichier.id}
            ]
        }],
        tools=[{"type": "code_interpreter"}],
        instructions=(
            "Execute chaque transformation etape par etape. "
            "Affiche un resume apres chaque etape : "
            "nombre de lignes avant/apres, colonnes modifiees. "
            "Exporte le resultat final en CSV et en Excel."
        )
    )

    # Load : recuperer les fichiers generes
    fichiers_sortie = []
    for item in response.output:
        if item.type == "code_interpreter_call":
            for result in item.results:
                if hasattr(result, "files"):
                    for f in result.files:
                        contenu = client.files.content(f.file_id)
                        with open(f.name, "wb") as out:
                            out.write(contenu.read())
                        fichiers_sortie.append(f.name)

    return {
        "rapport": response.output_text,
        "fichiers_generes": fichiers_sortie
    }

# Utilisation
resultat = pipeline_etl(
    "donnees_brutes.csv",
    "1. Supprime les colonnes vides "
    "2. Convertis les montants de centimes en euros "
    "3. Ajoute une colonne 'trimestre' basee sur la date "
    "4. Agrege les ventes par trimestre et categorie "
    "5. Calcule les variations en pourcentage"
)

Formats supportes

FormatExtensionsLectureEcriture
CSV.csvOuiOui
Excel.xlsx, .xlsOuiOui
JSON.jsonOuiOui
Images.png, .jpg, .gif, .bmpOuiOui
Texte.txt, .mdOuiOui
PDF.pdfLecture limiteeNon

Points cles a retenir

  • Uploadez les fichiers avec purpose="assistants" et passez-les via input_file
  • Le modele gere CSV, Excel multi-onglets et images nativement
  • Recuperez les fichiers generes via client.files.content()
  • Pour les gros fichiers, demandez un traitement par lots
  • Combinez plusieurs fichiers dans un meme appel pour des fusions et comparaisons