我试图遍历Python源代码中的所有字符串文字,同时能够分辨出每种字符串文字是什么类型。
不幸的是,如您在本例中所见,ast.parse
不起作用:
[node.value.s for node in ast.parse('\'x\'; u\'x\'; b\'x\'; "x"; u"x"; b"x"').body]
输出为:
['x', 'x', b'x', 'x', 'x', b'x']
表示我无法区分''
和u''
文字,还是''
和""
等。
我如何解析Python源代码,同时又保持原始文字的原样?
有内置的方法吗?
答案 0 :(得分:3)
您要查找的信息不是AST级信息。检验像这样的东西的适当级别是令牌级别,您可以为此使用tokenize
模块。
GMail
API非常笨拙-它希望输入的行为类似于类似二进制文件的对象的tokenize
方法-因此,您需要以二进制模式打开文件,如果您有一个字符串,则需要使用readline
和encode
进行转换。
io.BytesIO
这是Python 2版本-函数名称不同,由于必须使用常规元组而不是namedtuple,因此必须在位置上访问令牌信息:
import tokenize
token_stream = tokenize.tokenize(input_file.readline)
for token in token_stream:
if token.type == tokenize.STRING:
do_whatever_with(token.string)