我正在python-3.6中编写一个小程序来控制我的花园浇水。
我有一个文件,我设置了计时器。 例如:
Monday 7:00
所涉及的功能如下所示:
def getTimerFile():
""" Get timers from file an prepare them."""
timerFile = config.get("Basic", "TimerFile")
allowedDays = ["Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"]
try:
with open(timerFile) as f:
d = dict(x.rstrip().split(" ", 1) for x in f)
for key, value in d.items():
time.strptime(value, "%H:%M")
if key not in allowedDays:
raise ValueError(" {}".format(key))
except Exception as e:
# TODO: Error handling
return d
def setTimers(timerDict):
"""Set timer threads."""
for key, value in timerDict.items():
findDaySchedule(key, value)
def findDaySchedule(weekday, stTime):
"""Helper function
for switch/case statement."""
return {"Monday": schedule.every().monday.at(stTime).do(mv),
"Tuesday": schedule.every().tuesday.at(stTime).do(mv),
"Wednesday": schedule.every().wednesday.at(stTime).do(mv),
"Thursday": schedule.every().thursday.at(stTime).do(mv),
"Friday": schedule.every().friday.at(stTime).do(mv),
"Saturday": schedule.every().saturday.at(stTime).do(mv),
"Sunday": schedule.every().sunday.at(stTime).do(mv)
}.get(weekday, None) # Default is None
如果我每天只使用一个计时器,这可以正常工作。 但是,如果为前。星期六我想要两个计时器,只需要最后一个计时器。
那么使用这个重复键的最佳解决方案是什么。 我尝试过使用' defaultdict'但我没有得到正确工作的循环
提前感谢
答案 0 :(得分:2)
dict[weekday] -> list[times]
。 getattr
times.json
:
{
"monday": ["07:00", "10:00"],
"friday": ["09:00"]
}
然后使用它:
import json
import schedule
with open('times.json') as f:
times = json.load(f)
for day, times in times.items():
for time in times:
getattr(schedule.every(), day.lower()).at(time).do(stuff)
答案 1 :(得分:0)
非常感谢您的回答。 " json"方法就像一个魅力。 特别感谢关于" getattr"的两个提示。解。我以为会有比我庞大的词典更好的东西。