You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从Python代码中提取关键词?遇print语句提取难题

解决Python代码关键词提取问题

问题分析

你的代码未能成功提取目标内容,主要有两个原因:

  • 字符串分割方式无效:print('Hello World')作为一个整体被split()处理,无法拆出单独的print字符串。
  • 概念混淆:print是Python内置函数,并非语言关键词,keyword.iskeyword()会返回False,所以无法被识别。

解决方案:使用AST模块解析代码

Python的ast模块可以将代码解析为抽象语法树(AST),能准确识别代码的语法结构,是处理代码解析的可靠方式,完全避免字符串分割的局限性。

1. 提取Python语言关键词

以下代码可提取if、def、for等Python原生关键词:

import keyword
import ast

def extract_python_keywords(code):
    tree = ast.parse(code)
    keywords = set()
    
    for node in ast.walk(tree):
        # 根据节点类型识别关键词
        node_type = type(node).__name__.lower()
        if node_type in keyword.kwlist:
            keywords.add(node_type)
        # 处理特殊节点类型对应的关键词
        if isinstance(node, ast.FunctionDef):
            keywords.add('def')
        if isinstance(node, ast.ClassDef):
            keywords.add('class')
        if isinstance(node, ast.ImportFrom):
            keywords.add('from')
            keywords.add('import')
    
    return sorted(keywords)

# 测试示例
test_code = """
print('Hello World')
if True:
    for i in range(5):
        def foo():
            pass
"""
print("提取的Python关键词:", extract_python_keywords(test_code))

2. 同时提取关键词和内置函数

如果需要识别print这类内置函数,可结合builtins模块扩展功能:

import keyword
import ast
import builtins

def extract_keywords_and_builtins(code):
    tree = ast.parse(code)
    extracted = set()
    builtin_names = set(dir(builtins))
    
    for node in ast.walk(tree):
        # 提取语言关键词
        node_type = type(node).__name__.lower()
        if node_type in keyword.kwlist:
            extracted.add(node_type)
        if isinstance(node, ast.FunctionDef):
            extracted.add('def')
        if isinstance(node, ast.ClassDef):
            extracted.add('class')
        if isinstance(node, ast.ImportFrom):
            extracted.add('from')
            extracted.add('import')
        
        # 提取内置函数调用
        if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
            func_name = node.func.id
            if func_name in builtin_names:
                extracted.add(func_name)
    
    return sorted(extracted)

# 测试示例
test_code = "print('Hello World')"
print("提取的关键词和内置函数:", extract_keywords_and_builtins(test_code))

代码说明

  • ast.parse():将输入代码转换为抽象语法树,让程序能理解代码的语法逻辑。
  • ast.walk():遍历语法树的所有节点,逐个识别语法元素。
  • 内置函数识别:通过builtins模块获取所有内置函数名称,匹配代码中的函数调用节点。

内容的提问来源于stack exchange,提问作者Darshil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:50:24