【发布时间】:2021-09-27 11:00:36
【问题描述】:
我的数据已收集并整理在多个文件夹中。
在每个文件夹中,可以有多个类似的运行——例如在相同的条件下,在不同的时间收集数据。这些文件名中包含一个递增的数字。每个文件夹都包含在不同条件下收集的相似数据。例如,我可以有一个idle folder,其中可以有名为idle_1.csv、idle_2.csv、idle_3.csv 等的文件。然后我可以有另一个文件夹pos1 folder,类似地,pos1_1.csv、@ 987654327@等
为了跟踪数组中的数据来自哪个文件夹和哪个文件,我想使用文件夹名称“idle”、“pos1”等作为数组名称。然后,该文件夹中的每个文件(或处理该文件夹中每个文件产生的数据,而是)成为该数组中的另一行。
例如,如果文件夹名称存储在变量 arrname 中,文件索引存储在变量 arrndx 中,我想将值写入该数组:
arrname[arrndx]=value
这不起作用,出现以下错误:
TypeError: 'str' object does not support item assignment
然后,我考虑使用字典来执行此操作,但我想我仍然会遇到同样的问题。如果我使用字典,我想我需要每个字典的名称都是从文件夹名称派生的名称——创建相同的问题。如果我尝试将其用作字典中的键,则条目将被同一文件夹中每个文件的数据覆盖,因为名称相同:
arrays['name']=arrname
arrays['index']=int(arrndx)
arrays['val']=value
arrays['name': arrname, 'index':arrndx, 'val':value]
我也不能使用“索引”,因为它在每个不同的文件夹中都不是唯一的。
所以,我被难住了。我想我可以预定义所有数组,然后根据变量名写入正确的数组,但这可能会导致一个大的 case 语句(python 中有这样的东西吗?)或一个大的 if 语句。也许在我的情况下无法避免这种情况,但我认为必须有一种更优雅的方式......
编辑
我能够使用 globals() 解决我的问题:
globals()[arrname].insert(int(arrndx),value)
但是,我认为这不是“正确”的解决方案,尽管我不明白为什么这样做会令人不悦。
【问题讨论】:
标签: python arrays dictionary dynamic