在Python中通过数组调用时,Schedule模块会覆盖Schedule时间

2024-05-06 15:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个报警应用程序,但我很难让'时间表'模块的功能,我想它。问题是,在通过数组调用day属性时,我似乎无法为一天安排多个报警。你知道吗

一天中通常安排多次的示例:

schedule.every().sunday.at('17:25').do(job)
schedule.every().sunday.at('17:30').do(job)
schedule.every().sunday.at('17:35').do(job)

这很好,但是我真的想用for循环加载时间,这样我就不会有一个巨大的if语句,这样我就可以动态地加载时间:

dayArray = [
schedule.every().sunday,
schedule.every().monday,
schedule.every().tuesday,
schedule.every().wednesday,
schedule.every().thursday,
schedule.every().friday,
schedule.every().saturday
]

for i in range(1, xlsxAlarmSheet.ncols):
                for j in range(1, 8):
                    if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
                        dayArray[j - 1].at(str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j, i))[2:]).do(job)

通过XLRD模块从数组中加载日期,从xlsx文件中加载时间。唯一的问题是,当我安排一天多次的时候,警报会以某种方式相互覆盖。例如,如果我用这种方法为星期天安排3次,那么只有第三次安排的时间触发。我想这一定是因为当我将天加载到一个数组中时,它们不再是唯一的,所以我尝试了一个二维数组:

dayArray = [[
schedule.every().sunday,
schedule.every().monday,
schedule.every().tuesday,
schedule.every().wednesday,
schedule.every().thursday,
schedule.every().friday,
schedule.every().saturday
]] * (xlsxAlarmSheet.ncols - 1)

for i in range(1, xlsxAlarmSheet.ncols):
                for j in range(1, 8):
                    if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
                        dayArray[i - 1][j - 1].at(str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j, i))[2:]).do(job)

没有运气。。。时代还在互相改写,有什么想法吗?你知道吗


Tags: inforvalue时间jobcell数组do
3条回答

In another question I posted,我最初试图用字符串替换day属性,就像Vig在这篇文章的回答中所建议的那样。这对我不起作用,所以我最终将对象存储在一个数组中,正如Prune在我最初的问题中所建议的那样。你知道吗

然而,Prune还将a link发布到了一个示例(示例7),在该示例中,整个调度时间的调用都存储在一个字符串中,然后通过eval()调用,这似乎是可行的。你知道吗

所以这就是我最后要做的:

dayArray = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
dayTimeArray = []

for i in range(1, xlsxAlarmSheet.ncols):
    for j in range(1, 8):
        if(str(xlsxAlarmSheet.cell_value(j, i)) != '0'):
            dayTimeArray.append(
                "schedule.every().{}.at('{}').do(StartSubProcess)".format(
                    dayArray[j - 1], 
                    str(xlsxAlarmSheet.cell_value(j, i))[:2] + ':' + str(xlsxAlarmSheet.cell_value(j ,i))[2:]
                )
            )

for i in range(0, len(dayTimeArray)):
    eval(dayTimeArray[i])

我认为您可能需要使用索引来存储您的值。此链接可能会有所帮助。 https://treyhunner.com/2016/04/how-to-loop-with-indexes-in-python/#What_if_we_need_indexes?你知道吗

免责声明:0 Python体验,仅JavaScript。。。。但是。。。你知道吗

尽量不要在如下对象数组中调用函数:

dayArray = [[
schedule.every().sunday,
...

取而代之的是那天的名字(唯一不同的部分)

dayArray = [[
'sunday', 'monday', ...

然后在for-each中,在构建函数时使用该字符串名称

for each .... { schedule.every()[dayArray[i]].at(...).do(...) }

我的随机猜测是,当以这种方式存储时,它会被错误地调用,只需存储不同的部分(日名称),因为您可以在循环中调用该函数的其余部分(因为它对所有函数都是相同的)。你知道吗

希望这是有道理的。不知道它是否有效,只是一些尝试。祝你好运。你知道吗

相关问题 更多 >