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
-
As-tu déjà essayé quelque chose? As-tu pensé à str.index() ou str.find() ?
Ou encore str.replace() ?
-
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
-
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.
-
-
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