私はpythonソースファイルを処理するためにpython tokenizeモジュールを使用しています。以下のコードは次のようになります。pythonトークナイザの各行の後での操作方法
raw_list = []
words_list = []
g = tokenize.generate_tokens(file.readline)
for toknum, tokval, _, _, line in g:
if toknum == tokenize.NAME and tokval not in PYTHON_KEYWORD:
words_list.append(tokval)
私はline
変数を使用して、現在の行を参照することができます知っています。各行の後にwords_list
をraw_list
に追加したいと思います。どうやってやるの?具体的には、line
値が変更された後に毎回追加アクションを実行するにはどうすればよいですか?
私はnext
メソッドを使用することを考えていますが、それを行うためのきれいな方法はありません。
from __future__ import print_function
と4つのトークンがあります:from
、__future__
、import
、およびprint_function
は、例えば
、
は私の入力ソース・ファイルは一つだけの行が含まれていると。現在、g
で、各トークンに対して、「トークンタイプ」、「トークンストリング」、「(srow、scol)」、「(erow、ecol)」の5タプルが返されます。例えば、トークン__future__
は
NAME, (1,2), (1,5), "from __future__ import print_function"
"from __future__ import print_function"
を変数line
に読み込まれる必要があります。今、__future__
とprint_function
の両方がline
変数を "from __future__ import print_function"
に設定します。 __future__
とprint_function
だけがpython予約キーワードではないため、words_list
は['__future__', 'print_function']
になります。
words_list
をraw_list
に追加するには、line
の値が変更された場合(つまり、次の行の文字列)の場合のみ、私の質問に従ってください。
ありがとうございます!
'raw_list.append(word_list)' ???おそらくループの中で 'word_list'を初期化するでしょうか? –
@ juanpa.arrivillaga別の 'line'に到達するたびに' word_list'を追加しようとしました。私は確かに毎回追加したくありません。 – zack
...どういう意味ですか?各反復は異なる行ですので、各反復の最後に追加します。いいえ?おそらく、あなたがダミーのソースコードを作成して、入力/期待出力を示すことができれば、それは簡単でしょう。そうでなければ、 –