我被告知使用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
...
是否有其他/更好的方法来动态创建/更新我需要的变量,以便它们显示在全局范围内?
答案 0 :(得分:1)
globals()
字典中的字符串键对应于变量名,因此,您不需要使用exec
,您可以直接将变量写入全局哈希:
globals()["variable" + str(tempID)] = pd.read_csv('Z:/fakepath/'+str(tempID)+'.csv')