如何用Python根据分类器列表创建对应变量名的目录?
解决方案
首先要明确:直接遍历你当前的classifiers列表,没法直接获取到DT/LR/SVC这些变量名——因为列表里存的是分类器的实例对象,对象本身不知道自己被哪个变量引用。所以最稳妥的方式是把分类器名称和实例绑定在一起存储,再进行循环创建目录。
步骤1:调整分类器列表的存储形式
把原来的列表改成元组列表,每个元组包含目录名称和对应的分类器实例:
import sklearn.tree import sklearn.linear_model import sklearn.svm import os DT = sklearn.tree.DecisionTreeClassifier() LR = sklearn.linear_model.LogisticRegression() SVC = sklearn.svm.SVC() # 改成(名称, 实例)的元组列表 classifiers = [("DT", DT), ("LR", LR), ("SVC", SVC)]
步骤2:循环创建目录
使用os.makedirs()函数,设置exist_ok=True可以避免目录已存在时抛出错误:
for clf_name, clf in classifiers: # 创建目录,exist_ok=True表示目录已存在时不报错 os.makedirs(clf_name, exist_ok=True)
补充:如果不想修改原列表的替代方案(不推荐)
如果你坚持不想改原列表,可以通过全局变量字典globals()反向查找变量名,但这种方法有风险(比如多个变量指向同一个实例时会出错),示例代码如下:
for clf in classifiers: # 遍历全局变量,找到对应实例的变量名 clf_name = next(key for key, value in globals().items() if value is clf) os.makedirs(clf_name, exist_ok=True)
这种方式不如显式绑定名称可靠,建议优先用第一种方法。
内容的提问来源于stack exchange,提问作者Amina Umar
相关产品推荐
相关产品推荐

