Python如何基于文件夹名动态创建数组,解决字符串无法赋值问题
核心问题原因
你尝试赋值报错是因为arrname是存储文件夹名的字符串变量,并非列表对象,因此不支持下标赋值操作。
推荐解决方案
使用嵌套字典结构即可完美满足需求,不需要预定义所有文件夹名,也不需要写大量分支判断,同时不会出现键覆盖问题:
- 外层字典的键为文件夹名(如
idle、pos1) - 每个键对应的值为内层存储结构,按你的序号特性可以选列表或字典:
- 如果同一文件夹下的文件序号连续、从1递增,选列表更省空间,使用时注意对齐列表0起始的索引即可
- 如果序号可能跳号、不连续,选内层字典更稳妥,直接用序号当键即可
代码示例
# 仅需初始化一次外层存储字典 storage = {} # 处理每个文件时的逻辑 arrname = "idle" # 实际使用时替换为你提取的文件夹名 arrndx = int("1") # 实际使用时替换为你提取的文件序号 value = "处理后的数据" # 实际使用时替换为文件处理结果 # 动态初始化对应文件夹的存储结构,无需提前定义 if arrname not in storage: # 序号连续用列表 storage[arrname] = [] # 序号不连续用字典,替换为下行即可 # storage[arrname] = {} # 赋值操作,完全无冲突 if isinstance(storage[arrname], list): # 列表场景处理索引对齐,补全空位避免越界 target_index = arrndx - 1 if len(storage[arrname]) <= target_index: storage[arrname].extend([None] * (target_index - len(storage[arrname]) + 1)) storage[arrname][target_index] = value else: # 字典场景直接赋值 storage[arrname][arrndx] = value
后续要取用数据也非常方便,比如要取pos1文件夹下第3份数据,直接写storage['pos1'][2](列表场景)或storage['pos1'][3](字典场景)即可。
不推荐使用
globals()的原因 你目前用的globals()[arrname].insert(int(arrndx),value)虽然能跑,但存在多个严重问题:
- 命名冲突风险:动态生成的全局变量如果和代码中已有的全局变量(函数、常量、类等)重名,会直接覆盖原有对象,引发难以排查的逻辑错误。
- 可读性极低:这些动态生成的变量没有显式定义,后续维护代码时完全无法追溯变量来源,理解成本极高。
- 调试难度大:排查问题时全局命名空间会存在大量散列的动态变量,远不如从统一的存储字典中查询键值方便。
- 安全隐患:如果文件夹名属于外部可控输入,恶意构造的名称可以覆盖系统关键全局变量,甚至触发代码注入风险。
内容的提问来源于stack exchange,提问作者jrive
相关产品推荐
相关产品推荐

