IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Débogage de mon premier script ? [Python 3.X]


Sujet :

Python

  1. #1
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut Débogage de mon premier script ?
    Bonjour,
    En python je connais les 10 premières pages de "Python pour les nuls" !! Je me suis fait produire un script python avec l'aide de chat/jpt, autant dire que l'IA m'a écrit un script, mais il est bogué et à chaque bogue j'ai droit à 3 pages de théorie auxquelles je ne comprends à peu près rien. Est-ce que quelqu'un sur ce forum serait disposé à examiner mon script qui pour le moment ne fonctionne pas. Davantage de détails en cas d'intérêt. Merci d'avance pour toute proposition.
    Cordialement
    touche_a_tout

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 276
    Billets dans le blog
    48
    Par défaut
    Bonsoir,

    Citation Envoyé par touche_a_tout Voir le message
    Est-ce que quelqu'un sur ce forum serait disposé à examiner mon script qui pour le moment ne fonctionne pas. Davantage de détails en cas d'intérêt.
    Ben... c'est un peu le but de ce forum, évidemment que tu peux poster ton code pour examen

  3. #3
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut Débogage de mon premier script ?
    OK, merci. J'avais scrupule de venir avec un "produit acheté dans un autre magasin". D'abord, le but du script: lire une partition musicale au format MusicXML, repérer les mesures contenant au moins une note (quelle que soit sa hauteur etc), créer l'équivalent d'une feuille EXcel dans laquelle 24 lignes correspondent aux 24 portées de la partition XML; écrire le signe £ dans la cellule correspondant à une mesure contenant une note et rien si la mesure ne contient pas de note. J'espère que j'ai été clair. Quant au script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    # -*- coding: utf-8 -*-
    import os
    import numpy as np
    import logging
    import pandas as pd
    from music21 import converter, note, chord
     
    logging.basicConfig(
    level=logging.INFO, # niveau d'information
    format="%(levelname)s:%(message)s" # forme du message
    )
     
    logging.info("Le script est lancé")
     
    # === Paramètres ===
    DOSSIER = r"E:\2_M_E_S__P_R_O_J_E_T_S\IA_Cycle\musique\partit_XML"
    fichier_sortie = 'partition_condensee.xlsx'
    FICHIER = "Cy24_I_IA_25.xml"
    NB_MESURES = 20 # nombre de mesures à analyser
    SYMBOLE_NOTE = "£" # ce qui apparaît si la mesure contient une note/accord
    #(J’ai aussi ajouté les barres obliques inverses `\` manquantes, car `E:2_M_E_S__P_R_O_J_E_T_S...` est invalide comme chemin Windows — il faut `E:\2_M_E_S__P_R_O_J_E_T_S…`.)*
     
    # === Chargement de la partition ===
    chemin = os.path.join(DOSSIER, FICHIER)
    score = converter.parse(chemin)
     
    # === Préparation du tableau "portées x mesures" ===
    tableau = []
    for p_index, part in enumerate(score.parts, start=1):
        ligne = []
    for num_mesure in range(1, NB_MESURES + 1):
        m = part.measures(num_mesure, num_mesure)
    if m is None:
        ligne.append("")
    else:
        contient_note = any(
    isinstance(el, (note.Note, chord.Chord))
    for el in m.recurse().notes
    )
    ligne.append(SYMBOLE_NOTE if contient_note else "")
    tableau.append(ligne)
    print(type(tableau))
    print(np.shape(tableau))
    print(tableau[:2]) # aperçu des 2 premiers éléments
    # === Construction DataFrame ===
    df = pd.DataFrame(
    tableau,
    index=[f"Portée {i+1}" for i in range(len(score.parts))],
    columns=[f"Mesure {j+1}" for j in range(NB_MESURES)]
    )
     
    # === Export vers Excel ===
    #print(f"Le dossier de sortie est : {import os
    logging(f"✅ Fichier Excel généré : {fichier_sortie}")
    logging("Le script est lancé")
    #```
     
    import os
     
    DOSSIER = r"E:\2_M_E_S__P_R_O_J_E_T_S\IA_Cycle\musique\partit_XML"
    fichier_sortie = "partition_condensee.xlsx"
    # chemin_complet = os.path.join(DOSSIER, fichier_sortie)
    chemin_complet = os.path.join(DOSSIER, fichier_sortie)
     
    print("Chemin attendu :", chemin_complet)
     
    if os.path.exists(chemin_complet):
        print("✅ Le fichier existe bien à cet endroit.")
    else:
        print("❌ Fichier introuvable — vérifie si le script l’a bien créé ou si le dossier est correct.")
    Merci d'avance de vos commentaires.
    Cordialement
    touche_a_tout

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 276
    Billets dans le blog
    48
    Par défaut
    Pas simple pour un premier script...

    Mais quelles sont les erreurs signalées par l'interpréteur ?

  5. #5
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Non, c'est assez poilu. Le problème est que l'interpréteur (VSCode) indique qu'il n'y a aucun problème; tandis que le hic est que le fichier produit est introuvable, alors qu'il devrait se trouver dans le même sous-dir que le fichier MusicXML. Ce "premier script" n'est donc pas de moi, mais de chat/gpt ! Peut-être qu'il manque un "save" pour conserver le fichier produit ? Y a-t-il dans python un système d'espions permettant de connaître la valeur des variables à un instant T ?
    Merci d'avance.
    Cordialement
    touche_a_tout
    (L'ennui d'être touche_a_tout c'est qu'on n'est expert en rien !!)

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 080
    Par défaut
    Il y a au moins un problème d'indentation dans le code posté.

  7. #7
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Ah, j'ai tout de même obtrenu un message:
    Exception has occurred: ModuleNotFoundError
    No module named 'numpy'
    File "E:\2_M_E_S__P_R_O_J_E_T_S\IA_Cycle\Outils\thonpy\test_analyse_Cy24.py", line 3, in <module>
    import numpy as np
    ModuleNotFoundError: No module named 'numpy'

  8. #8
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut
    Il suffit d'insister, on en trrouve, des erreurs
    [{
    "resource": "/e:/2_M_E_S__P_R_O_J_E_T_S/IA_Cycle/Outils/thonpy/test_analyse_Cy24.py",
    "owner": "pylance2",
    "code": {
    "value": "reportMissingImports",
    "target": {
    "$mid": 1,
    "path": "/microsoft/pylance-release/blob/main/docs/diagnostics/reportMissingImports.md",
    "scheme": "https",
    "authority": "github.com"
    }
    },
    "severity": 4,
    "message": "Import "numpy" could not be resolved",
    "source": "Pylance",
    "startLineNumber": 3,
    "startColumn": 8,
    "endLineNumber": 3,
    "endColumn": 13,
    "origin": "extHost1"
    },{
    "resource": "/e:/2_M_E_S__P_R_O_J_E_T_S/IA_Cycle/Outils/thonpy/test_analyse_Cy24.py",
    "owner": "pylance2",
    "code": {
    "value": "reportMissingModuleSource",
    "target": {
    "$mid": 1,
    "path": "/microsoft/pylance-release/blob/main/docs/diagnostics/reportMissingModuleSource.md",
    "scheme": "https",
    "authority": "github.com"
    }
    },
    "severity": 4,
    "message": "Import "pandas" could not be resolved from source",
    "source": "Pylance",
    "startLineNumber": 5,
    "startColumn": 8,
    "endLineNumber": 5,
    "endColumn": 14,
    "origin": "extHost1"
    },{
    "resource": "/e:/2_M_E_S__P_R_O_J_E_T_S/IA_Cycle/Outils/thonpy/test_analyse_Cy24.py",
    "owner": "pylance2",
    "code": {
    "value": "reportMissingImports",
    "target": {
    "$mid": 1,
    "path": "/microsoft/pylance-release/blob/main/docs/diagnostics/reportMissingImports.md",
    "scheme": "https",
    "authority": "github.com"
    }
    },
    "severity": 4,
    "message": "Import "music21" could not be resolved",
    "source": "Pylance",
    "startLineNumber": 6,
    "startColumn": 6,
    "endLineNumber": 6,
    "endColumn": 13,
    "origin": "extHost1"
    },{
    "resource": "Untitled-1",
    "owner": "pylance2",
    "code": {
    "value": "reportMissingModuleSource",
    "target": {
    "$mid": 1,
    "path": "/microsoft/pylance-release/blob/main/docs/diagnostics/reportMissingModuleSource.md",
    "scheme": "https",
    "authority": "github.com"
    }
    },
    "severity": 4,
    "message": "Import "pandas" could not be resolved from source",
    "source": "Pylance",
    "startLineNumber": 5,
    "startColumn": 8,
    "endLineNumber": 5,
    "endColumn": 14,
    "origin": "extHost1"
    },{
    "resource": "Untitled-1",
    "owner": "pylance2",
    "code": {
    "value": "reportMissingImports",
    "target": {
    "$mid": 1,
    "path": "/microsoft/pylance-release/blob/main/docs/diagnostics/reportMissingImports.md",
    "scheme": "https",
    "authority": "github.com"
    }
    },
    "severity": 4,
    "message": "Import "music21" could not be resolved",
    "source": "Pylance",
    "startLineNumber": 6,
    "startColumn": 6,
    "endLineNumber": 6,
    "endColumn": 13,
    "origin": "extHost1"
    }]

    Jusqu'à présent les imports ne posaient pas de problèmes. Comprends pas ce qui se passe !
    Merci de l'attention portée à mesw soucis !
    touche_a_tout

  9. #9
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Là, je suis perdu !
    J'ai aussi testé ce script dans une invite de commande, avec encore un résultat différent. IL signale une erreur à la ligne 800 et quelques, alors que mon script a moins de 60 lignes. Je n'y comprends plus rien ! Mayday !
    touche_a_tout

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 276
    Billets dans le blog
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import numpy as np
    import pandas as pd
    from music21 import converter, note, chord
    cela devrait beaucoup mieux aller après avoir installé ces bibliothèques...

  11. #11
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Bonsoir,
    J'ai ajouté les 3 lignes et j'obtiens ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    C:\Users\41793>python
    Python 3.13.7 (tags/v3.13.7:bcee1c3, Aug 14 2025, 14:15:11) [MSC v.1944 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> # -*- coding: utf-8 -*-
    ... import os
    ... import numpy as np
    ... import logging
    ... import pandas as pd
    ... from music21 import converter, note, chord
    ...
    ... logging.basicConfig(
    ... level=logging.INFO, # niveau d'information
    ... format="%(levelname)s:%(message)s" # forme du message
    ... )
    ...
    ... logging.info("Le script est lancé")
    ...
    ...     ligne = []                                                                                                      ... for num_mesure in range(1, NB_MESURES + 1): start=1):
    ...     m = part.measures(num_mesure, num_mesure)
    ... if m is None:                                                                                                       ...     ligne.append("")s(num_mesure, num_mesure)                                                                       ... else:                                                                                                               ...     contient_note = any(                                                                                            ... isinstance(el, (note.Note, chord.Chord))                                                                            ... for el in m.recurse().notes                                                                                         ... )                                                                                                                   ... ligne.append(SYMBOLE_NOTE if contient_note else "")                                                                 ... tableau.append(ligne)                                                                                               ... print(type(tableau))                                                                                                ... print(np.shape(tableau))                                                                                            ... print(tableau[:2]) # aperçu des 2 premiers éléments                                                                 ... # === Construction DataFrame ===                                                                                    ... df = pd.DataFrame(                                                                                                  ... tableau,                                                                                                            ... index=[f"Portée {i+1}" for i in range(len(score.parts))],                                                           ... columns=[f"Mesure {j+1}" for j in range(NB_MESURES)]                                                                ... )                                                                                                                   ...
    ... # === Export vers Excel ===
    ... #print(f"Le dossier de sortie est : {import os
    ... logging(f"✅ Fichier Excel généré : {fichier_sortie}")
    ... logging("Le script est lancé")
    ... #```
    ...
    ... run
    ...
    INFO:Le script est lancé
    <class 'list'>
    (1, 1)
    [['']]
    Traceback (most recent call last):
      File "C:\Users\41793\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py", line 939, in _finalize_columns_and_data
        columns = _validate_or_indexify_columns(contents, columns)
      File "C:\Users\41793\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py", line 986, in _validate_or_indexify_columns
        raise AssertionError(
        ...<2 lines>...
        )
    AssertionError: 20 columns passed, passed data had 1 columns
     
    The above exception was the direct cause of the following exception:
     
    Traceback (most recent call last):
      File "<python-input-1>", line 45, in <module>
        df = pd.DataFrame(
        tableau,
        index=[f"Portée {i+1}" for i in range(len(score.parts))],
        columns=[f"Mesure {j+1}" for j in range(NB_MESURES)]
        )
      File "C:\Users\41793\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\frame.py", line 851, in __init__
        arrays, columns, index = nested_data_to_arrays(
                                 ~~~~~~~~~~~~~~~~~~~~~^
            # error: Argument 3 to "nested_data_to_arrays" has incompatible
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        ...<4 lines>...
            dtype,
            ^^^^^^
        )
        ^
      File "C:\Users\41793\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py", line 520, in nested_data_to_arrays
        arrays, columns = to_arrays(data, columns, dtype=dtype)
                          ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\41793\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py", line 845, in to_arrays
        content, columns = _finalize_columns_and_data(arr, columns, dtype)
                           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\41793\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py", line 942, in _finalize_columns_and_data
        raise ValueError(err) from err
    ValueError: 20 columns passed, passed data had 1 columns
    >>>
    Une précision: en copiant-collant tout le script, j'ai constaté la disparition des premières lignes avec les import, j'ai donc fait le coller en trois fois.
    Pour moi c'est toujours aussi obscur !
    Bien à vous
    touche_a_tout

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 459
    Par défaut
    Hello,

    en copiant-collant tout le script
    Oui mais vous l'avez collé au mauvais endroit,

    Vous ne semblez pas différencier ce qu'est un interpréteur python et un IDE.

    L'interpréteur python exécute le code Python ligne par ligne (ce que vous utilisez dans votre dernière copie d'écran).
    L'IDE fournit un environnement complet pour écrire, déboguer et gérer du code.

    Votre script ne doit pas être collé dans un interpréteur python, mais dans un IDE...

    Ensuite, vous dîtes, c'est toujours obscur, et on le voit bien avec votre dernière démarche de coller votre code dans l'interpréteur plutôt que dans un IDE (copie d'écran).

    Vous savez qu'il existe un tutoriel python en français et très complet (site officiel) ? https://docs.python.org/fr/3.14/tutorial/index.html
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Bonjour,
    Vous avez parfaitement raison, je confonds tout. La raison est que mon niveau en python est très proche de zéro. D'ailleurs, désespérant d'y comprendre quelque chose, je me suis adressé à une autre officine d'IA qui m'a fourni un script qui "marche".
    Désolé pour les experts que j'ai importunés pour rien; j'aurais dû commencer par où j'ai fini: chercher une autre IA.
    Merci à tous, ferai mieux la prochaine fois
    Cordialement
    touche_a_tout

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 080
    Par défaut
    Le problème était donc l'IA...

    Voilà qui résume bien cette génération et sûrement les futures.

  15. #15
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Salut !
    Les générations ? La mienne, c'est 1934 !
    A moi, une autre IA m'a fourni un script python clés en main, pourquoi s'en plaindre ?
    Bonne soirée
    touche_a_tout

  16. #16
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 459
    Par défaut
    Il aurait été intéressant de voir la solution proposée par l'IA, car IA ou pas, le rôle du forum reste le même, partager sa problématique et ses solutions.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  17. #17
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Re,
    C'est juste, voici donc ce que j'ai obtenu chez Yiaho.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # -*- coding: utf-8 -*-
    import music21 as m21
    import pandas as pd
     
    def analyze_musicxml(file_path):
        # Charger le fichier MusicXML
        score = m21.converter.parse(file_path)
     
        # Récupérer les mesures
        measures = score.getElementsByClass(m21.stream.Measure)
        presence_data = {'Measure': [], 'Has Note': []}
     
        for measure in measures:
            # Vérifier la présence d'au moins une note dans la mesure
            has_note = any(isinstance(n, m21.note.Note) for n in measure.notes)
            presence_data['Measure'].append(measure.number)
            presence_data['Has Note'].append(has_note)
     
        # Créer un DataFrame pandas
        df = pd.DataFrame(presence_data)
     
        # Enregistrer sous format Excel
        output_file = file_path.replace('.musicxml', '_analysis.xlsx')
        df.to_excel(output_file, index=False)
     
        print(f'Analyse terminée. Résultats enregistrés dans {output_file}')
     
    # Exemple d'utilisation
    analyze_musicxml('E:\\2_M_E_S__P_R_O_J_E_T_S\\IA_Cycle\\Outils\\thonpy\\analyse_Cy24_xml.py
    NB: le chemin indiqué sous "Exemple d'utilisation" est faux mais ça ne change rien au principe. L'objectif est d'analyser une partition musicale (24 portées, environ 500 mesures) et de créer une feuille excel similaire (24 lignes, env 500 colonnes) sur laquelle un signe £ figure dans les cellules correspondant à des mesures contenant au moins une note et rien dans les autres cellules. L'exploitation de la feuille Excel reste à faire, en VBA.
    J'ai quand même dialogué avec l'IA près d'une demi-journée !
    Bonne soirée
    touche_a_tout

  18. #18
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 459
    Par défaut
    Merci pour le code, on voit encore que l'IA a besoin de professionnel comme nous afin de progresser

    Voici quelques remarques,

    • Le code ne gère pas les erreurs, comme un chemin de fichier incorrect ou un fichier qui n'est pas un MusicXML valide.
    • Le nom du fichier de sortie est imposé. Il serait préférable de pouvoir le spécifier.
    • score.getElementsByClass(m21.stream.Measure) ne récupère que les mesures du niveau supérieur de la partition. Si la partition contient plusieurs parties (instruments), les mesures imbriquées ne seront pas trouvées.
    • L'exemple d'utilisation est directement dans le script. Il est préférable de le placer dans un bloc if __name__ == "__main__": pour permettre l'importation de la fonction dans d'autres modules sans exécuter l'analyse, si on souhaite faire évoluer le projet.



    Documenter n'est pas un luxe
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  19. #19
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 557
    Par défaut [Python 3.X] Débogage de mon premier script ?
    Oh oui, l'IA a besoin des hommes. Rien que l'art du "prompt" fait l'objet de cours car l'IA ne comprend pas toujours ce qu'on lui demande.
    Quant à moi je ne comprends pas ce que sont des "mesures imbriquées", pourtant je fais de la musique depuis 1942. L'introduction du fichier à analyser pourrait faire l'objet d'une userform, si la chose existe en python. Bref toutes tes remarques sont pleinement justifiées.
    Belle journée
    touche_a_tout

  20. #20
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 459
    Par défaut
    Quant à moi je ne comprends pas ce que sont des "mesures imbriquées", pourtant je fais de la musique depuis 1942. L'introduction du fichier à analyser pourrait faire l'objet d'une userform, si la chose existe en python. Bref toutes tes remarques sont pleinement justifiées.
    Quand à moi je n'en ai jamais fais, excusez moi de ne pas utiliser les bons termes...

    Mais ce n'est pas moi qui le dit, ça semble être la documentation !

    Quand music21 charge un fichier MusicXML, il ne crée pas une liste plate d'éléments. Il recrée la structure musicale logique, qui est hiérarchique, un peu comme des poupées russes.

    Si j'ai bien compris, dans une partition vous avez,
    1. les portées
    2. les mesures
    3. des accords
    4. ...


    Les mesures ne sont donc pas au "niveau supérieur" de la partition ; elles sont imbriquées (je sais pas dire autrement) à l'intérieur des parties instrumentales.

    Quand vous exécutez score.getElementsByClass(m21.stream.Measure), vous demandez à music21 : "Parmi les enfants directs de la partition, lesquels sont des mesures ?".

    C'est ici que la magie opère. La méthode .recurse() est un itérateur qui "aplatit" la structure hiérarchique. Elle parcourt l'arbre entier, en profondeur, et vous donne accès à tous les éléments, peu importe à quel point ils sont imbriqués.

    Donc rien à voir avec la musique mais à une structure XML à analyser et à comprendre...

    EDIT: Ce que j'appelle partition semble s'appeler Score (doc Streams)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PowerShell] Mon premier script PowerShell - Gestion date fichier photo Nikon *.NEF
    Par Guy-91 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 25/01/2022, 18h34
  2. Aide pour mon premier script sous linux
    Par bomonde dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 21/10/2010, 14h27
  3. [AJAX] Mon premier script PHP/MYSQL/AJAX
    Par NiC1305 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/04/2008, 19h51
  4. [JSF] mon premier JSF:Cannot find FacesContext
    Par anitshka dans le forum JSF
    Réponses: 15
    Dernier message: 24/08/2007, 19h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo