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

为何animal、vegetable、mineral变量始终为空?求Python代码解决方案

问题根源分析

你当前的代码错误在于直接把文件的文本行当成了列表元素处理,而没有解析AVM.py里定义的data列表变量:

  • 当你用enumerate(toBeSplit)迭代文件对象时,每一个itemB是文件里的一行字符串,比如第二行是 ["76534ytuieghfyo7g8t", "Animal", "Cheetah"],
  • 你用itemB[1]取的是字符串的第二个字符(这里是空格),永远不可能等于"Vegetable",所以所有if判断都不触发,变量自然为空。
解决方法

要正确获取AVM.py里的data数据,有两种常用方式:

方式1:直接导入模块(推荐)

因为AVM.py是合法的Python文件,可以直接导入其中的data变量:

# splitter.py
from AVM import data

animals = []
vegetables = []
minerals = []

for item in data:
    category = item[1]
    if category == "Animal":
        animals.append(item)
    elif category == "Vegetable":
        vegetables.append(item)
    elif category == "Mineral":
        minerals.append(item)

# 后续可将三个列表写入不同文件

方式2:用ast模块解析文件文本

如果不想用导入的方式,可以用Python的ast模块解析文件内容,提取data变量的值:

# splitter.py
import ast

animals = []
vegetables = []
minerals = []

with open('AVM.py', 'r', encoding='utf-8') as f:
    content = f.read()
    tree = ast.parse(content)
    # 遍历语法树找到data变量
    for node in ast.walk(tree):
        if isinstance(node, ast.Assign) and node.targets[0].id == 'data':
            data = ast.literal_eval(node.value)
            break

# 拆分数据
for item in data:
    category = item[1]
    if category == "Animal":
        animals.append(item)
    elif category == "Vegetable":
        vegetables.append(item)
    elif category == "Mineral":
        minerals.append(item)
额外说明

两种方式都能正确获取data列表,然后通过遍历每个元素的第二个值(item[1])判断分类,将元素分配到对应列表中。导入模块的方式更简洁高效,适合绝大多数场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:03:09