Clé cachée dans un nom fichier crypté

ibra -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -

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. PierrotLeFou
     

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

    Ou encore str.replace() ?

    1
    1. Ibraa
       

      Oui, mais j'y suis pas arrivé 

      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     

    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. brucine Messages postés 24785 Date d'inscription   Statut Membre Dernière intervention   4 160
       

      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. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     

    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