我有这样的csv,
name,job
Jay,engineer
Kay,layer
hop,warrior
然后我将其加载pandas
datafrme
并放入数据库
df = pd.read_csv('job.csv')
for index,row in df.iterrows():
q = Issue(name = row[0],job = row[1])
q.save()
print ("Register : ",row[0] , " / ",row[1])
exit()
它运作良好,但现在,我想将此代码概括为如下所示的函数。
def stor_db(classname):
df = pd.read_csv(classname + '.csv')
for index,row in df.iterrows():
q = `classname`(
`title[0]ofdf` = row[0],
`title[1]ofdf` = row[1])
q.save()
print ("Register : ",row[0] , " / ",row[1])
exit()
我需要动态地创建变量/类名。
可能是python和pandas吗?
Python中的所有内容都是一个对象,包括类。
内置的type()主要用于检查变量类型,但用途最少。如果type()与3个参数一起使用,它将创建一个新的Object类型。
第一个参数是您的类的名称,第二个参数是用于继承的基类的元组,第三个是将成为__dict__属性的dict。
Example = type("Example", (object,), {"a" : 0})
# equivalent to
class Example(object):
def __init__(self):
self.a = 0
所以你可以做这样的事情
Example = type(classname, (object,), {title[0]ofdf = row[0], title[1]ofdf = row[1]})
继承具有所需方法而不是对象的基类,您将拥有所需的通用方法。
编辑:
如果您的类是Django模型,它将完全改变问题的性质,并且此解决方案不相关。您的模型已经存在,因此您实际上并不希望动态创建类,而是动态选择模型。
我想我将使用__class __.__ name_的load_from_csv方法,该方法通过继承共享,并使用kwargs作为构造函数的参数(假设models属性与csv列完全匹配)。
非常感谢,了解它非常有用。所以现在我想做的是在model.py中声明的django模型
object,class Issue(models.Model):
,所以现在我尝试这样做,q = type("Issue",(models.Model,),{'name' : 'testname','job' : 'test'})
但是显示错误module = attrs.pop('__module__') KeyError: '__module__'
好吧,我认为不适合这种方式,请参见我的编辑。
我明白了..但是感谢您的回答,它给了我关于python的新知识。我需要更多地了解Django框架