Clé cachée dans un nom fichier crypté

Bonjour,

j'ai des données de type csv avec des noms qui sont cryptés selon le modèle comme suit : 

xx_IP23_AA_BB_CC_DD_EE_FF_GG_HH_II_JJ_KK_LL_MM.csv“.

Chaque couple ( AA , BB etc..)  est une potentielle clé pour un paramètre bien precis . Dans mon cas,  je recherche la position de la clé d'un seul paramètre , appellons le "Recherché", qui me pemettra  de retrouver les abreviations de tous les données en rapport avec le paramètre en question , car ils sont tous même index dans les differents fichiers . Par exemple si la clé pour mon paramètre "Recherché" est AA , toutes abreviation dans les noms des fichiers a l'index(position) 9 et 10 seront les données  de mon paramètre "Recherché".

voici l'exemple le nom d'un fichier :

xx_IP23_FA_5Z_6g_Fu_8k_32_Rq_V7_mj_Ao_B9_rj_yw.csv

Pouvez vous écrire un code qui me pemettra de trouver la la position  clé de mon paramètre "Recherché"?

Merci  


Windows / Edge 114.0.1823.43

3 réponses

  1. As-tu déjà essayé quelque chose? As-tu pensé à str.index() ou str.find() ?

    Ou encore str.replace() ?

    1
    1. Oui, mais j'y suis pas arrivé 

      0
  2. Modérateur

    Bonjour,

    Personnellement je n'ai pas compris ce que tu cherches à faire... probablement parce que l'exemple ne détaille ni le contenu du fichier csv, ni ce qu'il faut en faire.

    De plus, comme le dit Pierrot, voir ce que tu as commencé à coder nous permettrait de mieux comprendre ce que tu cherches à faire.

    Bonne chance

    0
    1. Bonjour,

      Si j'ai bien compris, la recherche doit porter sur le nom du fichier csv et pas son contenu.

      Si je recherche "6g" dans le deuxième exemple, ça doit me retourner 15-16.

      Ce que l'histoire ne dit pas, c'est s'il peut y avoir dans le même répertoire plusieurs fichiers csv objets de la recherche et si elle doit toujours comporter 2 caractères (donc excluant toujours IP23 ou analogues).

      Moyennant quoi la solution est simple en Batch, mais la question est posée pour Python, je botte en touche.

      0
  3. Modérateur

    Bonjour,

    En admettant que l'interprétation de Brucine #4 soit correcte, on pourrait écrire quelque chose dans ce genre :

    def split_keys(s: str) -> dict: 
        d = dict() 
        i = 0    
        for (j, a) in enumerate(s):
            if a in {"_", "."}:
                key = s[i:j] 
                ij = (i, j) 
                i = j + 1
                if len(key) != 2:
                    continue 
                d[key] = ij
                if a == ".":
                    break    
        return d
    
    s = "xx_IP23_FA_5Z_6g_Fu_8k_32_Rq_V7_mj_Ao_B9_rj_yw.csv"
    d = split_keys(s)
    print(d.get("FA"))  # (8, 10)

    On peut vérifier que le dictionnaire d contient bien des "clés" de longueur 2

    print(d)
    # {'xx': (0, 2),
    #  'FA': (8, 10),
    #  '5Z': (11, 13),
    #  '6g': (14, 16),
    #  'Fu': (17, 19),
    #  '8k': (20, 22),
    #  '32': (23, 25),
    #  'Rq': (26, 28),
    #  'V7': (29, 31),
    #  'mj': (32, 34),
    #  'Ao': (35, 37),
    #  'B9': (38, 40),
    #  'rj': (41, 43),
    #  'yw': (44, 46)}

    ... et que ces indices sont corrects :

    def test_split_keys(s: str):
        d = split_keys(s)
        for (key, (i, j)) in d.items():
            assert s[i:j] == key
    
    test_split_keys(s)

    Bonne chance

    0