Problème avec python & javascipt
Fermé
ilyess_kira
Messages postés
45
Date d'inscription
mercredi 9 mai 2012
Statut
Membre
Dernière intervention
6 décembre 2012
-
4 juin 2012 à 15:44
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 5 juin 2012 à 13:42
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 5 juin 2012 à 13:42
A voir également:
- Problème avec python & javascipt
- Citizen code python avis - Accueil - Outils
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Extraire données fichier texte python ✓ - Forum Python
4 réponses
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 4/06/2012 à 17:17
Modifié par heyquem le 4/06/2012 à 17:17
Bonjour
Je ne comprends pas bien.
Qu'y a-t-il dans le fichier de nom test.log ?
Pourquoi tous ces print ?
Note que je connais fort peu javascript , à peine quelques principes
Je ne comprends pas bien.
Qu'y a-t-il dans le fichier de nom test.log ?
Pourquoi tous ces print ?
Note que je connais fort peu javascript , à peine quelques principes
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 5/06/2012 à 11:56
Modifié par heyquem le 5/06/2012 à 11:56
Je n'y comprends toujours pas grand chose.
Y a-t-il une seule chaîne ou plusieurs que tu veux extraire du fichier test.log ?
S'il y en a plusieurs, peux tu donner en exemple une dizaine de ces chaînes, stp.
S'il y en a une seule, peux tu préciser si elle comporte une partie variable ou non.
Les expressions régulières permettent de détecter et capturer des chaînes ayant à la fois des caractéristiques fixes (sinon on ne pourrait pas les détecter) et des parties variables.
Faut il comprendre que dans 'dls_rlc_mac_ue_configuration_request' la partie '_ue_configuration_request ' est ici une valeur précise mais que dans d'autres chaînes cette partie est différente ?
D'autre part je ne comprends pas ce que signifie "afficher une chaîne sous forme de lien sous html"
Veux tu faire afficher des chaînes, trouvées dans un fichier test.log, dans une fenêtre de navigateur au lieu de les faire afficher dans une console Python ou une fenêtre IDLE ?
Je ne comprends pas plus l'histoire des print.
PS
Pour lire le fichier, ceci est mieux:
et ceci encore mieux:
PPS
Quand on cherche quelque chose dans un fichier avec une expression régulière, ce n'est pas la peine de passer les lignes en revue une par une. Il est plus judicieux d'analyser le contenu du fichier d'un coup:
Y a-t-il une seule chaîne ou plusieurs que tu veux extraire du fichier test.log ?
S'il y en a plusieurs, peux tu donner en exemple une dizaine de ces chaînes, stp.
S'il y en a une seule, peux tu préciser si elle comporte une partie variable ou non.
Les expressions régulières permettent de détecter et capturer des chaînes ayant à la fois des caractéristiques fixes (sinon on ne pourrait pas les détecter) et des parties variables.
Faut il comprendre que dans 'dls_rlc_mac_ue_configuration_request' la partie '_ue_configuration_request ' est ici une valeur précise mais que dans d'autres chaînes cette partie est différente ?
D'autre part je ne comprends pas ce que signifie "afficher une chaîne sous forme de lien sous html"
Veux tu faire afficher des chaînes, trouvées dans un fichier test.log, dans une fenêtre de navigateur au lieu de les faire afficher dans une console Python ou une fenêtre IDLE ?
Je ne comprends pas plus l'histoire des print.
PS
Pour lire le fichier, ceci est mieux:
f=open("test.log","r") for line in f: ............. ...... ........... f.close()
et ceci encore mieux:
with open("test.log","r") as f: for line in f: ............. ...... ...........
PPS
Quand on cherche quelque chose dans un fichier avec une expression régulière, ce n'est pas la peine de passer les lignes en revue une par une. Il est plus judicieux d'analyser le contenu du fichier d'un coup:
with open("test.log","r") as f: content = f.read() li = regx.findall(content) # et ensuite on travaille sur li # ou bien : for match in regx.finditer(content): ............. ........ ................
ilyess_kira
Messages postés
45
Date d'inscription
mercredi 9 mai 2012
Statut
Membre
Dernière intervention
6 décembre 2012
5 juin 2012 à 12:06
5 juin 2012 à 12:06
Je vais essayer d'être plus clair cette fois-ci.
J'ai une page html divisée en 2 parties avec des frames ( je sais que c'est obsolète mais on m'a demandé de faire avec )
le fichier test.log c'est un fichier que j'ai fais moi même et qui comporte de l'hexadecimal ainsi que des chaînes de caractères. voila à quoi il resemble :
dans un premier temps j'ai fais un premier programme pour extraire tous l'hexadécimal
Donc ça c'est OK.
ce que je veux faire maintenant c'est extraire tous les chaines de caractère qui commence par "dls_rlc_mac" donc il y en a plusieurs et les afficher dans la frame 1 sous forme de lien en html
et en cliquant sur un ces liens je dois obtenir le résultat de mon premier programme càd afficher de l'hexadécimal dans la 2éme frame.
( c'est un peu bourrin mais je veux que ça marche comme ça déjà après pour faire propre chaque lien dois me renvoyer l'hexadécimal qui lui correspond
par exmple:
dls_rlc_mac_ue_configuration_request_t (frame 1 )
dls_rlc_mac_ue_configuration_response_t(frame 1)
si je clique sur le premier lien j'ai ça :
00840044 00000040 00000000 0085FFFF ......... (frame 2)
et si je clique sur le 2 eme lien j'obtient ça :
00433399 00461040 0000AF580 0030FFFF......(frame 2 )
Merci encore une fois
J'ai une page html divisée en 2 parties avec des frames ( je sais que c'est obsolète mais on m'a demandé de faire avec )
le fichier test.log c'est un fichier que j'ai fais moi même et qui comporte de l'hexadecimal ainsi que des chaînes de caractères. voila à quoi il resemble :
dls_rlc_mac_ue_configuration_request_t 00840044 00000040 00000000 0085FFFF ...D...@........ 00000010 00000000 25000750 03E80001 ........%..P.... 00000000 00000000 00000000 00000000 ................ 00000001 00000000 00000000 00000000 ................ 00000000 00000000 00000000 00000000 ................ 00000000 00000000 00000000 ............ dls_rlc_mac_ue_configuration_response_t 00433399 00461040 0000AF580 0030FFFF .......@........ .......
dans un premier temps j'ai fais un premier programme pour extraire tous l'hexadécimal
Donc ça c'est OK.
ce que je veux faire maintenant c'est extraire tous les chaines de caractère qui commence par "dls_rlc_mac" donc il y en a plusieurs et les afficher dans la frame 1 sous forme de lien en html
et en cliquant sur un ces liens je dois obtenir le résultat de mon premier programme càd afficher de l'hexadécimal dans la 2éme frame.
( c'est un peu bourrin mais je veux que ça marche comme ça déjà après pour faire propre chaque lien dois me renvoyer l'hexadécimal qui lui correspond
par exmple:
dls_rlc_mac_ue_configuration_request_t (frame 1 )
dls_rlc_mac_ue_configuration_response_t(frame 1)
si je clique sur le premier lien j'ai ça :
00840044 00000040 00000000 0085FFFF ......... (frame 2)
et si je clique sur le 2 eme lien j'obtient ça :
00433399 00461040 0000AF580 0030FFFF......(frame 2 )
Merci encore une fois
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
5 juin 2012 à 13:07
5 juin 2012 à 13:07
J'ail'impression que ton problème réside d'abord dans la compréhension de ce que fait le module re en Python.
Il faut comprendre qu'il y a 4 sortes d'objets :
- pattern de regex (une chaîne)
- regex (objet de classe RegexObject)
- match (objet de classe MatchObject)
- méthodes d'objet match
Un pattern de regex sert à définir une regex par compilation:
Une regex peut servir à détecter le premier matching dans une chaîne ss:
Disposer d'un objet match permet ensuite d'exploiter les données que contient ce match par le biais de ses méthodes:
ma.end(),ma.groups(), ma.group(2), ma.lastindex, etc
Une regex peut servir aussi à détecter plusieurs matchings dans une chaîne:
Pour débroussailler ton problème, je crois donc qu'il faut commencer par attraper succintement les chaînes voulues dans ton fichier:
La méthode findall() d'une regex condense deux processus: la recherche de match et la sollicitation de la méthode group() ou groups() (selon s'il y a des groupes définis dans le pattern de la regex)
Tu devrais donc essayer ceci:
L'objet li sera la liste des chaînes que tu recherches
[^ ]+ signifie: toute suite de caractères sauf le blanc
Si on voulait exclure le caractère 'k' on écrirait [^k]+
Ici pour aller au bout de la suite de caractères qu peuvent être a priori n'importe quoi, j'utilise un blanc.
S'il y avait à faire des traitements sur le match capté par chaque matching, il faudrait utiliser la méthode finditer() de la regex qui , elle, fournit les matches l'un après l'autre, ce qui permet de travailler dessus
Il faut comprendre qu'il y a 4 sortes d'objets :
- pattern de regex (une chaîne)
- regex (objet de classe RegexObject)
- match (objet de classe MatchObject)
- méthodes d'objet match
Un pattern de regex sert à définir une regex par compilation:
regx = re.compile(pattern de regex)Personnellement, je m'efforce de n'employer 'expression régulière" et "regex" que pour désigner exclusivement les objets de type RegexObject
Une regex peut servir à détecter le premier matching dans une chaîne ss:
regx.search(ss)Cette expression crée un objet de type MatchObject auquel on peut assigner un nom
ma = regx.search()
Disposer d'un objet match permet ensuite d'exploiter les données que contient ce match par le biais de ses méthodes:
ma.end(),ma.groups(), ma.group(2), ma.lastindex, etc
Une regex peut servir aussi à détecter plusieurs matchings dans une chaîne:
for ma in regx.finditer(ss):C'est pour cela qu'il est intéressant de créer une regex: quand il y a à détecter dans un texte plusieurs fois un motif répondant au pattern de la regex , disposer de la regex permet d'éviter la recompilation implicitement contenue dans l'instruction
re.search(pattern de regex, ss)à chaque fois qu'elle serait appelée.
Pour débroussailler ton problème, je crois donc qu'il faut commencer par attraper succintement les chaînes voulues dans ton fichier:
La méthode findall() d'une regex condense deux processus: la recherche de match et la sollicitation de la méthode group() ou groups() (selon s'il y a des groupes définis dans le pattern de la regex)
Tu devrais donc essayer ceci:
import re regx = re.compile('dls_rlc_mac[^ ]+') with open("test.log","r") as f: content = f.read() li = regx.findall(content)
L'objet li sera la liste des chaînes que tu recherches
[^ ]+ signifie: toute suite de caractères sauf le blanc
Si on voulait exclure le caractère 'k' on écrirait [^k]+
Ici pour aller au bout de la suite de caractères qu peuvent être a priori n'importe quoi, j'utilise un blanc.
S'il y avait à faire des traitements sur le match capté par chaque matching, il faudrait utiliser la méthode finditer() de la regex qui , elle, fournit les matches l'un après l'autre, ce qui permet de travailler dessus
ilyess_kira
Messages postés
45
Date d'inscription
mercredi 9 mai 2012
Statut
Membre
Dernière intervention
6 décembre 2012
5 juin 2012 à 13:25
5 juin 2012 à 13:25
J'ai essayé avec votre méthode ..... sauf que ça ne marche pas vraiment . il me met qu'il y'a des erreurs partout et je ne vais pas pouvoir les résoudre vu que déjà comme vous l'avez deviné je ne suis pas expert dans le module re de Python et qu'en plus j'étais assez satisfait avec le résultat du petit code que j'ai fais....
mais au final le problème ce n'est pas l'extraction de la chaîne elle même mais plutôt commet transformer le résultat " li " ou "txt "dans mon cas, sous forme de lien en html.
mais au final le problème ce n'est pas l'extraction de la chaîne elle même mais plutôt commet transformer le résultat " li " ou "txt "dans mon cas, sous forme de lien en html.
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 5/06/2012 à 13:48
Modifié par heyquem le 5/06/2012 à 13:48
Pas la peine d'être expert, ne t'inquiète pas.
Si tu indiques quelles sont le erreurs, je corrigerai. Ca m'étonnerait que ce soit bien compliqué
Bon, pour ce qui est du "lien", si je comprend bien tu veux obtenir
'<a href="javascript:" onClick=javascript:charger();>dls_rlc_mac_ue_configuration_request_t</a> '
à partir de
'dls_rlc_mac_ue_configuration_request_t'
et
'<a href="javascript:" onClick=javascript:charger();>dls_rlc_mac_ue_configuration_response_t</a> '
à partir de
'dls_rlc_mac_ue_configuration_response_t'
Il suffit de faire:
Si tu indiques quelles sont le erreurs, je corrigerai. Ca m'étonnerait que ce soit bien compliqué
Bon, pour ce qui est du "lien", si je comprend bien tu veux obtenir
'<a href="javascript:" onClick=javascript:charger();>dls_rlc_mac_ue_configuration_request_t</a> '
à partir de
'dls_rlc_mac_ue_configuration_request_t'
et
'<a href="javascript:" onClick=javascript:charger();>dls_rlc_mac_ue_configuration_response_t</a> '
à partir de
'dls_rlc_mac_ue_configuration_response_t'
Il suffit de faire:
# avec li = ['dls_rlc_mac_ue_configuration_request_t', 'dls_rlc_mac_ue_configuration_response_t'] for el in li: print el.join('<a href="javascript:" onClick=javascript:charger();>', '</a> ')
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
5 juin 2012 à 13:34
5 juin 2012 à 13:34
Ensuite,
quand tu dis que le fichier contient de l'hexadécimal, tu veux dire qu'il y a des suites de caractères qui représentent des valeurs numériques exprimées en notation hexdécimale ?
Mais ce sont quand même des caractères dans le fichier ?
Auquel cas, avec une regex, il va être possible de tout attraper d'un coup, les chaînes de caractères et les informations numériques exprimées en hexadécimal
quand tu dis que le fichier contient de l'hexadécimal, tu veux dire qu'il y a des suites de caractères qui représentent des valeurs numériques exprimées en notation hexdécimale ?
Mais ce sont quand même des caractères dans le fichier ?
Auquel cas, avec une regex, il va être possible de tout attraper d'un coup, les chaînes de caractères et les informations numériques exprimées en hexadécimal
Modifié par ilyess_kira le 5/06/2012 à 10:05
C'est dans le fichier test.log que j'ai la chaîne que je veux extraire et donc l'afficher sous forme de lien sous html.
Les print c'est par ce que je travail sur un serveur python et si je veux qu'il comprenne le html faut que je mette des print partout ( mais ceci n'est pas vrmnt le problème )
J'utilise une boucle en Python pour afficher une liste de liens.
Voilà ma boucle concernée :
:
Et le résultat de ma de mon if je vois qu'il soit sous forme de lien html
j'ai essayé plusieurs méthode de concaténation mais ça marche pas mieux
exemple :
Merci d'avance