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
相关产品推荐
相关产品推荐

