您好,登錄后才能下訂單哦!
當你女朋友要過生日了,你肯定要定找家飯店訂個餐慶祝一下,餐館工作日會空一些,周末位置不好定,要是能知道她的生日是星期幾就好了,下面這個程序就能搞定~~
比如girl friend 的生日假設是 gf_birthday='2017-3-3'
1).我們先把變量格式化成一個datetime對象
birthday=datetime.datetime.strptime(gf_birthday,'%Y-%m-%d')
2).然后利用datetime里面的函數weekday來得到一個下標
birthday.weekday()
3).構造一個weekdays的列表,根據下標從列表里面取出是周幾
weekdays=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
weekdays[birthday.weekday()]
當然你要計算比如情人節,圣誕節什么的都可以用上面的程序,或者整個列表把10年的節日都羅列計算一下都是可以了,是不是很簡單,對日期的理解有木有加深了一下下
在Python里面,比如你想定期去爬一個網頁,或者做運維的同學想每天12點去定時download一個文件,或者定時去掃描一些服務器,甚至老板的需求不停的變可能是,每隔5分鐘,或者每小時的整點10分,每周每月都有一些定時任務
用Python怎么破很簡單,下面這個程序輕松搞定
我們先從一個最簡單的例子說,假設我們是每分種的第10秒,去執行一個任務去打印一下當前的目錄
1).window下是dir命令,linux是ls
我們用platform這個模塊來判斷一下操作系統
import platform
os_platfrom=platform.platform()
if os_platfrom.startswith('Darwin'):
print'this is mac os system'
os.system('ls')
elif os_platfrom.startswith('Window'):
print'this is win system'
os.system('dir')
2).如何定時執行
a.我們先獲取當前的時間
now=datetime.datetime.now()
假設當前時間是2017-02-09 20:19:47.555000
b.然后我們輸入一個你要定時執行的target時間
比如你是x分10秒的時候執行sched_Timer=datetime.datetime(x,x,x,x,x,10)
前面的x是并不重要(只要最后是10秒就行了),我們就把目標時間設的比當前晚一點即可:
sched_Timer=datetime.datetime(2017,2,9,20,20,10)
c.好當時間到了20:20:10的時候要運行我們的程序
如何定時到了呢,很簡單用
if now==sched_Timer:
'run Task'
d.那么如何讓時間在下一分鐘10秒繼續執行呢,也很簡單用timedelta()
datetime.timedelta(minutes=1)把target時間往后增加一分鐘
sched_Timer=sched_Timer+datetime.timedelta(minutes=1)
然后外邊用個while 死循環hold住就可以了
同樣的這個代碼也可以擴展,把minutes=1改成hours=1就變成了每個小時定時任務,改成days=1就變成每天的定時任務
作者:菜鳥學python 鏈接:http://www.jianshu.com/p/ab8d9e576ac4 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
以下是這篇文章的評論,我覺得還是不錯的,也解決上面的問題時間不匹配的問題,特地貼過來來看看
按樓主提供的方法嘗試了下,樓主提供的一種定時思路是可行的,不過在具體執行過程中“if now==sched_Timer:”這里可能會有點問題。
在while循環中,datetime.datetime.now()獲取的時間是“2017-8-10 17:22:54.123456”這種格式的,而樓主設置的時間格式 print 出來默認是“2017-8-10 17:22:54”,可能是程序運行時間的因素,實際運行過程中判定二者相等,進而執行if內的語句的情況很少出現(我這里嘗試了半個下午,沒有一次判定二者相等)。
下面是我自己稍作修改后自行使用的:
import time
sched_time = datetime.datetime(2017, 8, 10, 17, 31, 0)
loopflag = 0
while True:
now = datetime.datetime.now()
if sched_time<now<(sched_time+datetime.timedelta(seconds=1)):
loopflag = 1
time.sleep(1)
if loopflag == 1:
func() #此處為你自己想定時執行的功能函數
loopflag = 0
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。