Python - 替换exec用于动态变量创建

时间:2015-11-23 07:19:22

标签: python python-2.7 pandas

我被告知使用exec是一件非常糟糕的事情。

然而,我是python的新手,并试图弄清楚如何动态创建一堆全局变量(我知道这也应该是一个坏事,但让我们一次烧掉一个桥,我们应该吗?)。

这是做什么的:获取需要创建的当前变量列表(当前位于CSV中),获取该列表中的唯一ID,然后通过将ID附加到名称和读取来创建必要的对象另一个CSV的内容。

def __init__(self,args):
    win32serviceutil.ServiceFramework.__init__(self,args)
    self.hWaitStop = win32event.CreateEvent(None,0,0,None)

def SvcStop(self):
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    win32event.SetEvent(self.hWaitStop)  

def testEvent(self, status):
    if (win32event.win32event.WaitForSingleObject(self.hWaitStop, 0)
            == win32event.WAIT_OBJECT_0):
        raise EventException(status)

def SvcDoRun(self):
    servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                          servicemanager.PYS_SERVICE_STARTED,
                          (self._svc_name_,''))
    while True:
        # wait the event with a 0ms timeout (ie: just test it)
        evt = win32event.win32event.WaitForSingleObject(self.hWaitStop, 0)
        if evt == win32event.WAIT_OBJECT_0  # event is is signaled state
            sys.exit(0)
        else:
            try:
                self.doStuff()
            except EventException as e:
                status = e.status
                # cleanup potentially dependent on status

def doStuff(self):
    #do something that takes some time
    ...
    # in some places test if we should stop immediatelly
    self.testEvent(status)    # status is an arbitrary value
    ...

是否有其他/更好的方法来动态创建/更新我需要的变量,以便它们显示在全局范围内?

1 个答案:

答案 0 :(得分:1)

globals()字典中的字符串键对应于变量名,因此,您不需要使用exec,您可以直接将变量写入全局哈希:

     globals()["variable" + str(tempID)] = pd.read_csv('Z:/fakepath/'+str(tempID)+'.csv')