2016-05-24 15 views
2

Pythonのtokenizeモジュールで理解を深めるために、私は、与えられたpythonソースファイル(以下のような)のtokenize.tokenizeメソッドを呼び出すことに興味があり、ドキュメントで述べたように5タプルでトークン化された出力を取得します。Pythonのソースコードの例をトークン化する(Pythonで)

# Python source file 
import os 

class Test(): 
    """ 
    This class holds latitude, longitude, depth and magnitude data. 
    """ 

    def __init__(self, latitude, longitude, depth, magnitude): 
     self.latitude = latitude 
     self.longitude = longitude 
     self.depth = depth 
     self.magnitude = magnitude 

    def __str__(self): 
     # -1 is for detection of missing data 
     depth = self.depth 
     if depth == -1: 
      depth = 'unknown' 

     magnitude = self.magnitude 
     if magnitude == -1: 
      depth = 'unknown' 

     return "M{0}, {1} km, lat {2}\N{DEGREE SIGN} lon {3}\N{DEGREE SIGN}".format(magnitude, depth, self.latitude, self.longitude) 

残念ながら、ドキュメント内exampleはそれを動作させるためにPythonで私の未熟与えられた十分に明確ではありません。また、関連する便利なサンプルコードをオンラインで見つけることができませんでした。

簡単に実行可能なコード例をお待ちしております。 また、tokenizeモジュールとその方法の例/説明とともに役立つオンライン資料を知っていれば、それはすばらしいでしょう。

答えて

2

tokenize.tokenizeはジェネレータであり、ソース内の各トークンに対応する複数の5タプルになります。

with open('/path/to/src.py', 'rb') as f: 
    for five_tuple in tokenize.tokenize(f.readline): 
     print(five_tuple.type) 
     print(five_tuple.string) 
     print(five_tuple.start) 
     print(five_tuple.end) 
     print(five_tuple.line) 
+0

ご回答ありがとうございます。しかし、私はトークンの名前を取得していません。 'STRING'、' OP'などです。何か不足していますか? –

+0

タプルの最初の項目ですが、文字列ではなくintです。 'tokenize'モジュールのグローバル統計情報と比較する必要があります。if five_tuple.type == tokenize.OP' –

+0

私は、どのように構造的トークンを比較することができますか(if文などキーワード)? –

関連する問題