使用Python制作自動(dòng)推送微信消息提醒的備忘錄功能
日常工作生活中,事情一多,就會(huì)忘記一些該做未做的事情。即使有時(shí)候把事情記錄在了小本本上或者手機(jī)、電腦端備忘錄上,也總會(huì)有查看不及時(shí),導(dǎo)致錯(cuò)過的尷尬。如果有一款小工具,可以及時(shí)提醒,而不用再主動(dòng)去查備忘錄,化被動(dòng)為主動(dòng),那就再合適不過了。因此,在這里我們就利用Python,實(shí)現(xiàn)這樣的一款“小工具”。
初步設(shè)想
毫無疑問,手機(jī)是當(dāng)前使用最頻繁的工具,沒有之一。飯可以不吃,手機(jī)不可以不帶。如果能在某些特定的時(shí)點(diǎn),將備忘記錄事項(xiàng)通過某種形式發(fā)送到手機(jī)端,通過查看手機(jī)端消息實(shí)現(xiàn)事項(xiàng)提醒,那將是再好不過了。而手機(jī)端最常用的實(shí)時(shí)通訊工具,非微信莫屬。關(guān)于向手機(jī)端推送微信消息的功能,在之前的小項(xiàng)目中已經(jīng)使用過,這里可以直接套用。
【更新2.0】Python自動(dòng)監(jiān)測自如房源狀態(tài),推送微信消息提醒狀態(tài)變更
于是,我們有了以下思路:
•首先,要有一個(gè)可以記錄事項(xiàng)的文檔,用來記錄備忘事項(xiàng)的內(nèi)容、提醒時(shí)間、是否辦結(jié)等;
•其次,掃描這個(gè)文檔,獲取事項(xiàng)內(nèi)容,判斷事項(xiàng)是否辦結(jié),如已辦結(jié)需允許對文檔的修改,標(biāo)記辦結(jié)標(biāo)志;
•然后,設(shè)置一套提醒邏輯,規(guī)定在什么時(shí)間、什么情況下提醒;
•隨后,特殊情景處理,要能夠在不干擾程序正常運(yùn)行的條件下,添加新的備忘事項(xiàng),并且新添加事項(xiàng)能夠被掃描到;
•最后,在規(guī)定的時(shí)間和情境下,推送微信消息。
根據(jù)以上分析,需要的工具,包含三部分:
•一個(gè)可以編寫和運(yùn)行Python代碼的編輯器;
•一部裝有微信的手機(jī),最好有兩個(gè)微信號(hào);
•一個(gè)用來記錄事項(xiàng)的Excel文檔。
用圖表示如下:

用Python設(shè)計(jì)一個(gè)可以自動(dòng)推送微信消息提醒的備忘錄!
運(yùn)行前準(zhǔn)備
Excel文檔設(shè)計(jì)
為了記錄事項(xiàng),需要有一個(gè)用來保存事項(xiàng)記錄的Excel文檔。需要對文檔記錄逐條讀取,獲取事項(xiàng)內(nèi)容、辦結(jié)時(shí)間、辦結(jié)標(biāo)志等,因此需要對文檔格式進(jìn)行規(guī)范?,F(xiàn)在簡單的進(jìn)行了設(shè)計(jì),模式如下:

這是一個(gè)非常簡單的模式了,第二列內(nèi)容是具體提醒事項(xiàng)的詳細(xì)內(nèi)容;第三列日期列要按照“2018/09/02 18:00”的格式書寫,需要獲取該列的日期、時(shí)間;第四列是事項(xiàng)辦結(jié)標(biāo)志,已辦結(jié)事項(xiàng)標(biāo)注為“是”。
對于需要提醒事項(xiàng),需要按照如下格式記錄:

運(yùn)行結(jié)果
直接運(yùn)行程序,Excel文檔內(nèi)容變化如下:
我們看到,日期在當(dāng)前時(shí)間(運(yùn)行代碼的時(shí)間)之前的事項(xiàng),即已辦結(jié)事項(xiàng),內(nèi)容會(huì)添加背景色,“是否完成”標(biāo)注為“是”。另外,程序會(huì)整合未辦結(jié)事項(xiàng)內(nèi)容,推送微信通知,如下:

小編在此謝謝大家的觀看!Python很容易學(xué)!所以小編有弄一個(gè)交流,互問互答,資源共享的交流學(xué)習(xí)基地,如果你也是Python的學(xué)習(xí)者或者大牛都?xì)g迎你來!㪊:548+377+875!一起 學(xué)習(xí)共同進(jìn)步!
幾點(diǎn)說明
首先,因?yàn)閷?shí)現(xiàn)非常的簡單,過程粗暴、不細(xì)膩,一看代碼就懂(后附全部代碼),故不多介紹實(shí)現(xiàn)過程和邏輯,以免貽笑大方;其次,有幾點(diǎn)說明一下,如果各位有好的想法,請留言告知,便于我優(yōu)化完善;最后,想法大于實(shí)用,突發(fā)奇想,周末又有點(diǎn)時(shí)間而已。
•關(guān)于微信推送消息:用Python的itchat模塊實(shí)現(xiàn),僅僅是登錄、指定好友發(fā)送消息、退出等這樣簡單的操作,感興趣的可以直接去搜索該模塊,有很多參考資料;
•xlrd、xlwt和xlutils:xlrd打開Excel是只讀的,不能修改;xlwt是可以對Excel文檔修改,但是一般是新建一個(gè)文檔,然后在此基礎(chǔ)上修改,對于已有內(nèi)容的文檔,就不適用了,因此借用了xlutils,而xlutils在xlrd和xlwt之間建立了一個(gè)橋梁,實(shí)現(xiàn)了讀和寫;
•在添加新的事項(xiàng)時(shí),需要打開Excel文檔,如果沒有特殊處理,又恰好遇到程序?qū)ξ臋n的保存時(shí)會(huì)報(bào)錯(cuò),因此使用了try…except結(jié)構(gòu),遇到文檔占用,會(huì)跳過該次掃描,休息指定時(shí)間后重新開始;
•對于未辦結(jié)事項(xiàng),什么時(shí)間推送消息、一天推送幾次,都可以根據(jù)自身需要調(diào)節(jié);
•對于已辦結(jié)事項(xiàng),沒有進(jìn)行刪除,而是僅僅改變了格式繼續(xù)保留下來,程序運(yùn)行時(shí),還需要對這些事項(xiàng)進(jìn)行掃描,自然會(huì)造成資源浪費(fèi),不刪除是因?yàn)橄胗涗涀鲞^的事項(xiàng),便于日后查看,另外,對我個(gè)人而言,短時(shí)間內(nèi)也不會(huì)積累大量的事項(xiàng),不會(huì)造成太大的影響,當(dāng)然可以添加一些機(jī)制進(jìn)行處理,比如移動(dòng)到另外一個(gè)工作表中。
代碼
# 導(dǎo)入模塊
import xlrd
from xlutils.copy import copy
import xlwt
import itchat
import datetime
import time
# 使用手機(jī)掃描二維碼登錄微信
def WeChatLogin():
itchat.login()
# 給指定好友發(fā)送指定內(nèi)容的消息
def SendAMassage(friend, message):
users = itchat.search_friends(name=friend)
userName = users[0]['UserName']
itchat.send(message, toUserName = userName)
# 按照指定格式修改excel表格內(nèi)容
def ModifyContent(row,col,content,sheet,new_remindbook,path,style):
# 獲取工作表內(nèi)容
new_sheet = new_remindbook.get_sheet(0)
# 寫入數(shù)據(jù)
new_sheet.write(row,col,content,style)
# 保存文件
new_remindbook.save(path)
# 判斷提醒是否過期
def Overdue(nowtime,deadtime):
if deadtime<nowtime:
return True
else:
return False
# 程序運(yùn)行主體
if __name__=='__main__':
# 首次執(zhí)行標(biāo)志
first_exec = True
# 微信登錄
WeChatLogin()
# 指定微信消息推送好友
friend = '君以沫'
# 備忘本記錄文件地址
path = r'.記事本.et'
# 掃描備忘本記錄
while True:
# 文件占用標(biāo)志
occupy = False
# 打開excel文件,獲取文件屬性信息
remindbook = xlrd.open_workbook(path,formatting_info=True)
sheet = remindbook.sheet_by_index(0)
nrows=sheet.nrows
# 建立副本
new_remindbook=copy(remindbook)
# 初始化事項(xiàng)序號(hào)
mark = 1
# 初始化message信息
message='以下事項(xiàng)未辦結(jié):'
# 執(zhí)行一次備忘本掃描
for i in range(2, nrows):
# 如果已辦結(jié)事項(xiàng)或者空事項(xiàng),直接跳過
if sheet.cell(i,3).value=='是' or sheet.cell(i,2).value=='':
continue
# 獲取事項(xiàng)截止時(shí)間
deadtime = xlrd.xldate.xldate_as_datetime(sheet.cell(i,2).value, 0)
deadhour = deadtime.strftime('%H:%M')
# 獲取當(dāng)前時(shí)間
nowtime = datetime.datetime.now()
nowhour=nowtime.strftime("%H:%M")
# 如果過期,則將過期標(biāo)志設(shè)置為是
if Overdue(nowtime,deadtime):
# style0
style0 = xlwt.XFStyle()
# 設(shè)置單元格背景顏色
pattern= xlwt.Pattern()
pattern.pattern=1
pattern.pattern_fore_colour=22
style0.pattern=pattern
# 字體設(shè)置
font = xlwt.Font()
font.name = '仿宋_GB2312'
font.colour_index = 1
font.height =280
style0.font = font
# 邊框設(shè)置
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
# 為過期事項(xiàng)添加背景色(按指定格式重填)
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()
# 設(shè)置單元格字體、顏色、字號(hào)
font = xlwt.Font()
font.name = '仿宋_GB2312'
font.colour_index = 0
font.height =280
font.bold = False
style.font = font
# 設(shè)置單元格對齊方式
alig = xlwt.Alignment()
alig.horz = xlwt.Alignment.HORZ_CENTER
alig.vert = xlwt.Alignment.VERT_CENTER
style.alignment = alig
# 邊框設(shè)置
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
# 按照指定格式寫入數(shù)據(jù)
try:
ModifyContent(i,3,'是',sheet,new_remindbook,path,style)
except:
occupy = True
print('文件占用中,休息60s...')
time.sleep(6)
break
# 未過期事項(xiàng),添加到提醒信息中
else:
# 截止時(shí)間單獨(dú)事項(xiàng)提醒
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):
# 沒有未辦結(jié)事項(xiàng),結(jié)束循環(huán)
if len(message)<=8:
print('here')
break
# 首次運(yùn)行消息提醒
if first_exec:
SendAMassage(friend, message)
print(message)
first_exec = False
release = False
# 如果是以下時(shí)點(diǎn),則推送微信消息提醒
if nowhour in ['08:00','10:00','12:00','14:00','16:00']:
SendAMassage(friend, message)
# 其他時(shí)點(diǎn)
else:
print('當(dāng)前時(shí)間:'+ nowtime.strftime("%Y%m%d %H:%M:%S")+' '+'休息30秒...' )
# 半點(diǎn)整點(diǎn)打印未辦結(jié)事項(xiàng)
if nowhour[3:] in ['30','00']:
print(message)
time.sleep(30)
# 所有事項(xiàng)已辦結(jié)
message='所有事項(xiàng)已辦結(jié)。'
SendAMassage(friend, message)
print(message)
# 退出微信登錄
itchat.logout()
---恢復(fù)內(nèi)容結(jié)束---
總結(jié)
以上所述是小編給大家介紹的使用Python制作自動(dòng)推送微信消息提醒的備忘錄,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- python實(shí)現(xiàn)淘寶秒殺聚劃算搶購自動(dòng)提醒源碼
- python操作微信自動(dòng)發(fā)消息的實(shí)現(xiàn)(微信聊天機(jī)器人)
- python實(shí)現(xiàn)微信機(jī)器人: 登錄微信、消息接收、自動(dòng)回復(fù)功能
- 10分鐘教你用Python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
- python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
- 使用python實(shí)現(xiàn)微信小程序自動(dòng)簽到功能
- python實(shí)現(xiàn)微信每日一句自動(dòng)發(fā)送給喜歡的人
- 一步步教你用python給女朋友寫個(gè)微信自動(dòng)提醒的程序
相關(guān)文章
python 利用pandas將arff文件轉(zhuǎn)csv文件的方法
今天小編就為大家分享一篇python 利用pandas將arff文件轉(zhuǎn)csv文件的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
pandas?dataframe獲取所有行名稱與列名稱方法示例
這篇文章主要給大家介紹了關(guān)于pandas?dataframe獲取所有行名稱與列名稱的相關(guān)資料,Pandas是Python中用于數(shù)據(jù)分析的非常重要的庫,它提供了多種方法來獲取列名,需要的朋友可以參考下2023-09-09
利用Python將Excel快速轉(zhuǎn)換成HTML的代碼實(shí)現(xiàn)
在日常的辦公和數(shù)據(jù)處理任務(wù)中,Excel文件因其強(qiáng)大的表格數(shù)據(jù)管理能力而備受歡迎,然而,在某些情況下,我們可能需要將Excel文件轉(zhuǎn)換成HTML格式,以便在網(wǎng)頁上展示或進(jìn)行進(jìn)一步的數(shù)據(jù)處理,本文將介紹如何利用Python將Excel文件快速轉(zhuǎn)換成HTML,并提供具體的代碼示例和案例2024-12-12
構(gòu)建Python包的五個(gè)簡單準(zhǔn)則簡介
這篇文章主要介紹了構(gòu)建Python包的五個(gè)簡單準(zhǔn)則簡介,在Github開源合作日趨主流的今天,健壯的Python包的構(gòu)建成為開發(fā)者必須要考慮到的問題,本文提出了五項(xiàng)建議,需要的朋友可以參考下2015-06-06
python Hypothesis生成和執(zhí)行大量的測試用例
Hypothesis是一個(gè)基于屬性的測試(property-based testing)庫,它能夠幫助我們生成和執(zhí)行大量的測試用例,與傳統(tǒng)的單元測試相比,屬性測試更加靈活和全面,能夠發(fā)現(xiàn)更多的邊界情況和潛在的錯(cuò)誤2024-01-01

