日常工作生活中,事情一多,就会忘记一些该做未做的事情。即使有时候把事情记录在了小本本上或者手机、电脑端备忘录上,也总会有查看不及时,导致错过的尴尬。如果有一款小工具,可以及时提醒,而不用再主动去查备忘录,化被动为主动,那就再合适不过了。因此,在这里我们就利用python,实现这样的一款“小工具”。
初步设想
毫无疑问,手机是当前使用最频繁的工具,没有之一。饭可以不吃,手机不可以不带。如果能在某些特定的时点,将备忘记录事项通过某种形式发送到手机端,通过查看手机端消息实现事项提醒,那将是再好不过了。而手机端最常用的实时通讯工具,非微信莫属。关于向手机端推送微信消息的功能,在之前的小项目中已经使用过,这里可以直接套用。
【更新2.0】python自动监测自如房源状态,推送微信消息提醒状态变更
于是,我们有了以下思路:
•首先,要有一个可以记录事项的文档,用来记录备忘事项的内容、提醒时间、是否办结等;
•其次,扫描这个文档,获取事项内容,判断事项是否办结,如已办结需允许对文档的修改,标记办结标志;
•然后,设置一套提醒逻辑,规定在什么时间、什么情况下提醒;
•随后,特殊情景处理,要能够在不干扰程序正常运行的条件下,添加新的备忘事项,并且新添加事项能够被扫描到;
•最后,在规定的时间和情境下,推送微信消息。
根据以上分析,需要的工具,包含三部分:
•一个可以编写和运行python代码的编辑器;
•一部装有微信的手机,最好有两个微信号;
•一个用来记录事项的excel文档。
用图表示如下:
用python设计一个可以自动推送微信消息提醒的备忘录!
运行前准备
excel文档设计
为了记录事项,需要有一个用来保存事项记录的excel文档。需要对文档记录逐条读取,获取事项内容、办结时间、办结标志等,因此需要对文档格式进行规范。现在简单的进行了设计,模式如下:
这是一个非常简单的模式了,第二列内容是具体提醒事项的详细内容;第三列日期列要按照“2018/09/02 18:00”的格式书写,需要获取该列的日期、时间;第四列是事项办结标志,已办结事项标注为“是”。
对于需要提醒事项,需要按照如下格式记录:
运行结果
直接运行程序,excel文档内容变化如下:
我们看到,日期在当前时间(运行代码的时间)之前的事项,即已办结事项,内容会添加背景色,“是否完成”标注为“是”。另外,程序会整合未办结事项内容,推送微信通知,如下:
小编在此谢谢大家的观看!python很容易学!所以小编有弄一个交流,互问互答,资源共享的交流学习基地,如果你也是python的学习者或者大牛都欢迎你来!㪊:548+377+875!一起 学习共同进步!
几点说明
首先,因为实现非常的简单,过程粗暴、不细腻,一看代码就懂(后附全部代码),故不多介绍实现过程和逻辑,以免贻笑大方;其次,有几点说明一下,如果各位有好的想法,请留言告知,便于我优化完善;最后,想法大于实用,突发奇想,周末又有点时间而已。
•关于微信推送消息:用python的itchat模块实现,仅仅是登录、指定好友发送消息、退出等这样简单的操作,感兴趣的可以直接去搜索该模块,有很多参考资料;
•xlrd、xlwt和xlutils:xlrd打开excel是只读的,不能修改;xlwt是可以对excel文档修改,但是一般是新建一个文档,然后在此基础上修改,对于已有内容的文档,就不适用了,因此借用了xlutils,而xlutils在xlrd和xlwt之间建立了一个桥梁,实现了读和写;
•在添加新的事项时,需要打开excel文档,如果没有特殊处理,又恰好遇到程序对文档的保存时会报错,因此使用了try…except结构,遇到文档占用,会跳过该次扫描,休息指定时间后重新开始;
•对于未办结事项,什么时间推送消息、一天推送几次,都可以根据自身需要调节;
•对于已办结事项,没有进行删除,而是仅仅改变了格式继续保留下来,程序运行时,还需要对这些事项进行扫描,自然会造成资源浪费,不删除是因为想记录做过的事项,便于日后查看,另外,对我个人而言,短时间内也不会积累大量的事项,不会造成太大的影响,当然可以添加一些机制进行处理,比如移动到另外一个工作表中。
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# 导入模块 import xlrd from xlutils.copy import copy import xlwt import itchat import datetime import time # 使用手机扫描二维码登录微信 def wechatlogin(): itchat.login() # 给指定好友发送指定内容的消息 def sendamassage(friend, message): users = itchat.search_friends(name = friend) username = users[ 0 ][ 'username' ] itchat.send(message, tousername = username) # 按照指定格式修改excel表格内容 def modifycontent(row,col,content,sheet,new_remindbook,path,style): # 获取工作表内容 new_sheet = new_remindbook.get_sheet( 0 ) # 写入数据 new_sheet.write(row,col,content,style) # 保存文件 new_remindbook.save(path) # 判断提醒是否过期 def overdue(nowtime,deadtime): if deadtime<nowtime: return true else : return false # 程序运行主体 if __name__ = = '__main__' : # 首次执行标志 first_exec = true # 微信登录 wechatlogin() # 指定微信消息推送好友 friend = '君以沫' # 备忘本记录文件地址 path = r '.记事本.et' # 扫描备忘本记录 while true: # 文件占用标志 occupy = false # 打开excel文件,获取文件属性信息 remindbook = xlrd.open_workbook(path,formatting_info = true) sheet = remindbook.sheet_by_index( 0 ) nrows = sheet.nrows # 建立副本 new_remindbook = copy(remindbook) # 初始化事项序号 mark = 1 # 初始化message信息 message = '以下事项未办结:' # 执行一次备忘本扫描 for i in range ( 2 , nrows): # 如果已办结事项或者空事项,直接跳过 if sheet.cell(i, 3 ).value = = '是' or sheet.cell(i, 2 ).value = = '': continue # 获取事项截止时间 deadtime = xlrd.xldate.xldate_as_datetime(sheet.cell(i, 2 ).value, 0 ) deadhour = deadtime.strftime( '%h:%m' ) # 获取当前时间 nowtime = datetime.datetime.now() nowhour = nowtime.strftime( "%h:%m" ) # 如果过期,则将过期标志设置为是 if overdue(nowtime,deadtime): # style0 style0 = xlwt.xfstyle() # 设置单元格背景颜色 pattern = xlwt.pattern() pattern.pattern = 1 pattern.pattern_fore_colour = 22 style0.pattern = pattern # 字体设置 font = xlwt.font() font.name = '仿宋_gb2312' font.colour_index = 1 font.height = 280 style0.font = font # 边框设置 borders = xlwt.borders() borders.left = xlwt.borders.thin borders.left = xlwt.borders.thin borders.right = xlwt.borders.thin borders.top = xlwt.borders.thin borders.bottom = xlwt.borders.thin style0.borders = borders # 为过期事项添加背景色(按指定格式重填) try : modifycontent(i, 1 ,sheet.cell(i, 1 ).value,sheet,new_remindbook,path,style0) except : occupy = true print ( '文件占用中,休息60s...' ) time.sleep( 6 ) break # style style = xlwt.xfstyle() # 设置单元格字体、颜色、字号 font = xlwt.font() font.name = '仿宋_gb2312' font.colour_index = 0 font.height = 280 font.bold = false style.font = font # 设置单元格对齐方式 alig = xlwt.alignment() alig.horz = xlwt.alignment.horz_center alig.vert = xlwt.alignment.vert_center style.alignment = alig # 边框设置 borders = xlwt.borders() borders.left = xlwt.borders.thin borders.left = xlwt.borders.thin borders.right = xlwt.borders.thin borders.top = xlwt.borders.thin borders.bottom = xlwt.borders.thin style.borders = borders # 按照指定格式写入数据 try : modifycontent(i, 3 , '是' ,sheet,new_remindbook,path,style) except : occupy = true print ( '文件占用中,休息60s...' ) time.sleep( 6 ) break # 未过期事项,添加到提醒信息中 else : # 截止时间单独事项提醒 if deadhour = = nowhour: sendamassage(friend, sheet.cell(i, 1 ).value) message = message + ' '+' [ '+str(mark)+' ]' + sheet.cell(i, 1 ).value mark = mark + 1 # 如果没有被占用 if not (occupy): # 没有未办结事项,结束循环 if len (message)< = 8 : print ( 'here' ) break # 首次运行消息提醒 if first_exec: sendamassage(friend, message) print (message) first_exec = false release = false # 如果是以下时点,则推送微信消息提醒 if nowhour in [ '08:00' , '10:00' , '12:00' , '14:00' , '16:00' ]: sendamassage(friend, message) # 其他时点 else : print ( '当前时间:' + nowtime.strftime( "%y%m%d %h:%m:%s" ) + ' ' + '休息30秒...' ) # 半点整点打印未办结事项 if nowhour[ 3 :] in [ '30' , '00' ]: print (message) time.sleep( 30 ) # 所有事项已办结 message = '所有事项已办结。' sendamassage(friend, message) print (message) # 退出微信登录 itchat.logout() |
---恢复内容结束---
总结
以上所述是小编给大家介绍的使用python制作自动推送微信消息提醒的备忘录,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://www.cnblogs.com/PY08523/archive/2018/09/06/9598591.html