gpt4 book ai didi

python - 如何解析 Python 代码,同时保持字符串文字完全原样?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:31 24 4
gpt4 key购买 nike

我正在尝试遍历 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 源代码的同时保持原始文字与编写的完全一致?

有内置方法吗?

最佳答案

您要查找的信息不是 AST 级别的信息。检查此类内容的适当级别是 token 级别,您可以使用 tokenize模块。

tokenize API 非常笨拙 - 它需要一个类似于二进制文件类对象的 readline 方法的输入 - 所以你需要打开文件在二进制模式下,如果你有一个字符串,你需要使用 encodeio.BytesIO 进行转换。

import tokenize
token_stream = tokenize.tokenize(input_file.readline)
for token in token_stream:
if token.type == tokenize.STRING:
do_whatever_with(token.string)

这是 Python 2 版本 - 函数名称不同,您必须按位置访问 token 信息,因为您得到的是常规元组而不是命名元组:

import tokenize
token_stream = tokenize.generate_tokens(input_file.readline)
for token_type, token_string, _, _, _ in token_stream:
if token_type == tokenize.STRING:
do_whatever_with(token_string)

关于python - 如何解析 Python 代码,同时保持字符串文字完全原样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56335056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com