2009-05-13 2 views
0

S'il vous plaît aiderModule tokenize

Il y a beaucoup de jetons dans le module tokenize comme STRING, BACKQUOTE, AMPEREQUAL etc.

>>> import cStringIO 
>>> import tokenize 
>>> source = "{'test':'123','hehe':['hooray',0x10]}" 
>>> src = cStringIO.StringIO(source).readline 
>>> src = tokenize.generate_tokens(src) 
>>> src 
<generator object at 0x00BFBEE0> 
>>> src.next() 
(51, '{', (1, 0), (1, 1), "{'test':'123','hehe':['hooray',0x10]}") 
>>> token = src.next() 
>>> token 
(3, "'test'", (1, 1), (1, 7), "{'test':'123','hehe':['hooray',0x10]}") 
>>> token[0] 
3 
>>> tokenize.STRING 
3 
>>> tokenize.AMPER 
19 
>>> tokenize.AMPEREQUAL 
42 
>>> tokenize.AT 
50 
>>> tokenize.BACKQUOTE 
25 

C'est ce que j'experimented.But je n'étais pas en mesure de trouver ce qu'ils veulent dire? D'où je comprendrai ceci. J'ai besoin d'une solution immédiate.

+0

"J'ai besoin d'une solution immédiate." Hein? – SilentGhost

Répondre

3

Vous aurez besoin de lire le code tokenizer.c de Python pour comprendre les détails. Il suffit de rechercher le mot-clé que vous voulez savoir. Ça ne devrait pas être dur.

2

Les différentes valeurs AMPER, BACKQUOTE etc. correspondent au numéro de jeton du symbole approprié pour les jetons/opérateurs python. c'est-à-dire AMPER = & (esperluette), AMPEREQUAL = "& =".

Cependant, vous n'avez pas vraiment à vous soucier de cela. Ils sont utilisés par le tokeniser C interne, mais l'encapsuleur python simplifie la sortie, traduisant tous les symboles d'opérateur au jeton OP. Vous pouvez traduire les identifiants de jetons symboliques (la première valeur de chaque ligne de jetons) en nom symbolique à l'aide du dictionnaire tok_name du module token. Par exemple:

>>> import tokenize, token 
>>> s = "{'test':'123','hehe':['hooray',0x10]}" 
>>> for t in tokenize.generate_tokens(iter([s]).next): 
     print token.tok_name[t[0]], 

OP STRING OP STRING OP STRING OP OP STRING OP NUMBER OP OP ENDMARKER 

Comme une déclaration de débogage rapide pour décrire les jetons un peu mieux, vous pouvez également utiliser tokenize.printtoken. Ceci est sans papier, et ressemble à ce n'est pas présent dans python3, il ne faut pas compter sur elle pour le code de production, mais comme un coup d'œil à ce que les jetons signifient, vous pouvez le trouver utile:

>>> for t in tokenize.generate_tokens(iter([s]).next): 
     tokenize.printtoken(*t) 

1,0-1,1:  OP  '{' 
1,1-1,7:  STRING "'test'" 
1,7-1,8:  OP  ':' 
1,8-1,13:  STRING "'123'" 
1,13-1,14:  OP  ',' 
1,14-1,20:  STRING "'hehe'" 
1,20-1,21:  OP  ':' 
1,21-1,22:  OP  '[' 
1,22-1,30:  STRING "'hooray'" 
1,30-1,31:  OP  ',' 
1,31-1,35:  NUMBER '0x10' 
1,35-1,36:  OP  ']' 
1,36-1,37:  OP  '}' 
2,0-2,0:  ENDMARKER  '' 

les différentes valeurs du tuple vous revenez pour chaque jeton sont, dans l'ordre:

  1. Id jeton (correspond au type, par exemple sTRING, OP, NOM, etc.)
  2. la chaîne - le texte du jeton pour ce jeton, par exemple "&" ou "'une chaîne" "
  3. Le début (ligne , colonne) dans votre entrée
  4. La fin (ligne, colonne) dans votre entrée
  5. Le texte intégral de la ligne sur laquelle se trouve le jeton.