2

Pythonのtokenizeは、見つかったすべてのトークンの位置を(startRow、startCol)と(endRow、endCol)の2つのタプルとして返します。

文字列の先頭からのオフセットとして位置を返す方法はありますか?つまり、「オフセット」だけを優先して(row、col)を削除したいと思います。

4

1 に答える 1

1

に組み込まれているものはありませんtokenize

トークナイザーが使用しているのと同じ行のセットにアクセスできる場合は、累積された「行Xまでの行の全長」をリストに保存し、それを使用して行の値を追加のオフセットに変換できます。

例えば:

import tokenize

def tokens_with_offset(path):
    line_offsets = []
    line_offset_accum = 0
    with open(path) as f:
        for line in f:
            line_offsets.append(line_offset_accum)
            line_offset_accum += len(line)

    with open(path) as f:
        for ttype, tstring, tbegin, tend, tline in tokenize.generate_tokens(f.readline):
            offset_begin = line_offsets[tbegin[0]] + tbegin[1]
            offset_end = line_offsets[tend[0]] + tend[1]
            yield ttype, tstring, offset_begin, offset_end, tline

(注:このコードはテストしていません。これは一般的な概念の例です。)

于 2012-04-29T17:09:23.617 に答える