【问题标题】:Create a bunch of objects from files in a directory从目录中的文件创建一堆对象
【发布时间】:2020-11-01 05:55:28
【问题描述】:

我创建了一个类,用于操作和处理我的数据。

class DataSet():
    def __init__(self, path, label_names, ohe_names, random_state=420):
        self.df = pd.read_csv(path)
        self.random_state = random_state
        self.encodings = LabelEncoder() 
        self.scaler = StandardScaler()

我想为目录中的每个文件创建一个新的数据集对象,数据集的名称是文件名。

到目前为止我有这个代码。

for file in os.listdir('data/'):
    name = file[:-4]
    path = 'data/'+file

每个name,例如“fox”,都应该是一个名为name/fox 的新DataSet 对象。我怎样才能做到这一点?

希望这是有道理的。提前致谢。

【问题讨论】:

  • 请用问题更新您的问题。

标签: python python-object


【解决方案1】:

我设法弄明白了。

for file in os.listdir('data/'):
    name = file[:-4]
    path = 'data/'+file
    exec("{} = DataSet('{}')".format(name, path))
    

【讨论】:

  • 顺便说一句,最好不要使用exec()。那么,这对你有什么作用呢?
  • 我为什么要避免使用exec()?这会导入我的 data/ 目录中的所有 .csv 文件,并为每个文件创建一个新的 DataSet 对象。
  • 好的,但是那些DataSet 对象存储在哪里以及如何访问它们?
  • 如果您的其中一个文件恰好被命名为filenamepath 等,那么您完全可以用它来覆盖程序中的实际变量吗?跨度>
  • 该类本质上只是一个熊猫数据框。它具有对数据进行变换和逆变换的方法。 @jasonharper 你建议我使用较少的通用变量名?
【解决方案2】:

鉴于您对自己的答案感到满意,您还应该考虑将 DataSet 实例存储在容器中。我建议dict

frames = {}
for file in os.listdir('data/'):
    name = file[:-4]
    path = 'data/'+file
    frames[name] = DataSet(path)
print(frames)

【讨论】:

  • 谢谢!我会使用你的建议
猜你喜欢
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2013-03-03
  • 2011-02-03
  • 2015-04-17
  • 2011-01-15
相关资源
最近更新 更多