Clé cachée dans un nom fichier crypté

ibra - 20 juin 2023 à 18:57
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 21 juin 2023 à 20:56

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

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

Ou encore str.replace() ?

1

Oui, mais j'y suis pas arrivé 

0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
21 juin 2023 à 17:16

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 14320 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 26 avril 2024 1 814
21 juin 2023 à 18:27

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 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
21 juin 2023 à 20:56

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