2

Python 的标记化将所有找到的标记的位置作为 (startRow, startCol) 和 (endRow, endCol) 的两个元组返回。

有没有办法将位置作为从字符串开头的偏移量返回?也就是说,我想摆脱 (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 回答