Clé cachée dans un nom fichier crypté

ibra -  
mamiemando Messages postés 33769 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

A voir également:

3 réponses

PierrotLeFou
 

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

Ou encore str.replace() ?

1
Ibraa
 

Oui, mais j'y suis pas arrivé 

0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 

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
brucine Messages postés 21667 Date d'inscription   Statut Membre Dernière intervention   3 422
 

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

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