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

Python写入文件报string indices must be integers错误如何解决?

错误原因

  • 你构建的general_keys是一维字典结构,存储格式为{'install': 'all', 'aws.a': 'data', 'aws.b': 'data1', 'aws.c': 'data2'},写入代码中尝试用general_keys['install']['install']访问嵌套值,相当于对字符串'all'使用字符串类型的索引,直接触发string indices must be integers报错。
  • 原逻辑中general_keys不存在db_manager和aws.两个键,直接访问会触发KeyError,且db_manager在原始数据源中没有匹配项,你的预期输出也不需要该字段,可直接删除相关逻辑。
  • 匹配逻辑存在冗余重复执行的问题,同一个键会被多次过滤更新。

修复方案

我们可以直接优化匹配+写入逻辑,完整可运行代码如下:

all_keys = {'activity': 'ins','install': 'all','aws.a': 'data', 'aws.b': 'data1', 'aws.c': 'data2'} 
general_key_array = ['install', 'aws.']  
general_keys = dict()

# 优化匹配逻辑,避免重复操作
for prefix in general_key_array:
    for k, v in all_keys.items():
        if k.startswith(prefix):
            general_keys[k] = v

# 写入文件逻辑,直接按需求输出
with open('output.txt', 'w') as f:
    # 写入install行
    f.write(f"install={general_keys['install']}\n")
    # 写入所有aws开头的行
    for k, v in general_keys.items():
        if k.startswith('aws.'):
            f.write(f"{k}={v}\n")

运行后输出文件内容完全符合预期:

install=all
aws.a=data
aws.b=data1
aws.c=data2

可选优化:按前缀分类存储

如果你需要按前缀归类存储方便后续扩展,也可以调整生成逻辑为嵌套结构:

all_keys = {'activity': 'ins','install': 'all','aws.a': 'data', 'aws.b': 'data1', 'aws.c': 'data2'} 
general_key_array = ['install', 'aws.']  
# 初始化嵌套结构
general_keys = {prefix: {} if prefix.endswith('.') else None for prefix in general_key_array}

for prefix in general_key_array:
    for k, v in all_keys.items():
        if k.startswith(prefix):
            if prefix == 'install':
                general_keys[prefix] = v
            else:
                general_keys[prefix][k] = v

# 写入逻辑
with open('output.txt', 'w') as f:
    f.write(f"install={general_keys['install']}\n")
    for k, v in general_keys['aws.'].items():
        f.write(f"{k}={v}\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:57:01