標籤:傳參數 令行 列表 except 一級目錄 序列化 curd 字串類型 ==
Time模組
和時間有關係的我們就要用到時間模組。在使用模組之前,應該首先匯入這個模組。
#常用方法1.time.sleep(secs)(線程)延遲指定的時間運行。單位為秒。2.time.time()擷取目前時間戳
表示時間的三種方式
在Python中,通常有這三種方式來表示時間:時間戳記、元組(struct_time)、格式化的時間字串:
(1)時間戳記(timestamp) :通常來說,時間戳記表示的是從1970年1月1日00:00:00開始按秒計算的位移量。我們運行“type(time.time())”,返回的是float類型。
(2)格式化的時間字串(Format String): ‘1999-12-06’
%y 兩位元的年份表示(00-99)%Y 四位元的年份表示(000-9999)%m 月份(01-12)%d 月內中的一天(0-31)%H 24小時制小時數(0-23)%I 12小時制小時數(01-12)%M 分鐘數(00=59)%S 秒(00-59)%a 本地簡化星期名稱%A 本地完整星期名稱%b 本地簡化的月份名稱%B 本地完整的月份名稱%c 本地相應的日期表示和時間表示%j 年內的一天(001-366)%p 本地A.M.或P.M.的等價符%U 一年中的星期數(00-53)星期天為星期的開始%w 星期(0-6),星期天為星期的開始%W 一年中的星期數(00-53)星期一為星期的開始%x 本地相應的日期表示%X 本地相應的時間表示%Z 當前時區的名稱%% %號本身
python中時間日期格式化符號:
(3)元組(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)
首先,我們先匯入time模組,來認識一下python中表示時間的幾種格式:
#匯入時間模組>>>import time#時間戳記>>>time.time()1500875844.800804#時間字串>>>time.strftime("%Y-%m-%d %X")‘2017-07-24 13:54:37‘>>>time.strftime("%Y-%m-%d %H-%M-%S")‘2017-07-24 13-55-04‘#時間元組:localtime將一個時間戳記轉換為當前時區的struct_timetime.localtime()time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=13, tm_min=59, tm_sec=37, tm_wday=0, tm_yday=205, tm_isdst=0)
小結:時間戳記是電腦能夠識別的時間;時間字串是人能夠看懂的時間;元組則是用來操作時間的
幾種格式之間的轉換
#時間戳記-->結構化時間#time.gmtime(時間戳記) #UTC時間,與英國倫敦當地時間一致#time.localtime(時間戳記) #當地時間。例如我們現在在北京執行這個方法:與UTC時間相差8小時,UTC時間+8小時 = 北京時間 >>>time.gmtime(1500000000)time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)>>>time.localtime(1500000000)time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)#結構化時間-->時間戳記 #time.mktime(結構化時間)>>>time_tuple = time.localtime(1500000000)>>>time.mktime(time_tuple)1500000000.0
#結構化時間-->字串時間#time.strftime("格式定義","結構化時間") 結構化時間參數若不傳,則現實目前時間>>>time.strftime("%Y-%m-%d %X")‘2017-07-24 14:55:36‘>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))‘2017-07-14‘#字串時間-->結構化時間#time.strptime(時間字串,字串對應格式)>>>time.strptime("2017-03-16","%Y-%m-%d")time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)>>>time.strptime("07/24/2017","%m/%d/%Y")time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
#結構化時間 --> %a %b %d %H:%M:%S %Y串#time.asctime(結構化時間) 如果不傳參數,直接返回目前時間的格式化串>>>time.asctime(time.localtime(1500000000))‘Fri Jul 14 10:40:00 2017‘>>>time.asctime()‘Mon Jul 24 15:18:33 2017‘#時間戳記 --> %a %d %d %H:%M:%S %Y串#time.ctime(時間戳記) 如果不傳參數,直接返回目前時間的格式化串>>>time.ctime()‘Mon Jul 24 15:19:07 2017‘>>>time.ctime(1500000000)‘Fri Jul 14 10:40:00 2017‘
import timetrue_time=time.mktime(time.strptime(‘2017-09-11 08:30:00‘,‘%Y-%m-%d %H:%M:%S‘))time_now=time.mktime(time.strptime(‘2017-09-12 11:00:00‘,‘%Y-%m-%d %H:%M:%S‘))dif_time=time_now-true_timestruct_time=time.gmtime(dif_time)print(‘過去了%d年%d月%d天%d小時%d分鐘%d秒‘%(struct_time.tm_year-1970,struct_time.tm_mon-1, struct_time.tm_mday-1,struct_time.tm_hour, struct_time.tm_min,struct_time.tm_sec))
random模組
>>> import random#隨機小數>>> random.random() # 大於0且小於1之間的小數0.7664338663654585>>> random.uniform(1,3) #大於1小於3的小數1.6270147180533838#隨機整數>>> random.randint(1,5) # 大於等於1且小於等於5之間的整數>>> random.randrange(1,10,2) # 大於等於1且小於10之間的奇數#隨機播放一個返回>>> random.choice([1,‘23‘,[4,5]]) # #1或者23或者[4,5]#隨機播放多個返回,返回的個數為函數的第二個參數>>> random.sample([1,‘23‘,[4,5]],2) # #列表元素任意2個組合[[4, 5], ‘23‘]#打亂列表順序>>> item=[1,3,5,7,9]>>> random.shuffle(item) # 打亂次序>>> item[5, 1, 3, 7, 9]>>> random.shuffle(item)>>> item[5, 9, 7, 1, 3]
練習:產生隨機驗證碼
import randomdef v_code(): code = ‘‘ for i in range(5): num=random.randint(0,9) alf=chr(random.randint(65,90)) add=random.choice([num,alf]) code="".join([code,str(add)]) return codeprint(v_code())
os模組
os模組是與作業系統互動的一個介面
os.getcwd() 擷取當前工作目錄,即當前python指令碼工作的目錄路徑os.chdir("dirname") 改變當前指令碼工作目錄;相當於shell下cdos.curdir 返回目前的目錄: (‘.‘)os.pardir 擷取目前的目錄的父目錄字元串名:(‘..‘)os.makedirs(‘dirname1/dirname2‘) 可產生多層遞迴目錄os.removedirs(‘dirname1‘) 若目錄為空白,則刪除,並遞迴到上一級目錄,如若也為空白,則刪除,依此類推os.mkdir(‘dirname‘) 產生單級目錄;相當於shell中mkdir dirnameos.rmdir(‘dirname‘) 刪除單級空目錄,若目錄不為空白則無法刪除,報錯;相當於shell中rmdir dirnameos.listdir(‘dirname‘) 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表方式列印os.remove() 刪除一個檔案os.rename("oldname","newname") 重新命名檔案/目錄os.stat(‘path/filename‘) 擷取檔案/目錄資訊os.sep 輸出作業系統特定的路徑分隔字元,win下為"\\",Linux下為"/"os.linesep 輸出當前平台使用的行終止符,win下為"\t\n",Linux下為"\n"os.pathsep 輸出用於分割檔案路徑的字串 win下為;,Linux下為:os.name 輸出字串指示當前使用平台。win->‘nt‘; Linux->‘posix‘os.system("bash command") 運行shell命令,直接顯示os.popen("bash command).read() 運行shell命令,擷取執行結果os.environ 擷取系統內容變數os.pathos.path.abspath(path) 返回path正常化的絕對路徑 os.path.split(path) 將path分割成目錄和檔案名稱二元組返回 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最後的檔案名稱。如何path以/或\結尾,那麼就會返回空值。 即os.path.split(path)的第二個元素os.path.exists(path) 如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path) 如果path是絕對路徑,返回Trueos.path.isfile(path) 如果path是一個存在的檔案,返回True。否則返回Falseos.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回Falseos.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略os.path.getatime(path) 返回path所指向的檔案或者目錄的最後訪問時間os.path.getmtime(path) 返回path所指向的檔案或者目錄的最後修改時間os.path.getsize(path) 返回path的大小os模組方法大全
注意:os.stat(‘path/filename‘) 擷取檔案/目錄資訊 的結構說明
stat 結構:st_mode: inode 保護模式st_ino: inode 節點號。st_dev: inode 駐留的裝置。st_nlink: inode 的連結數。st_uid: 所有者的使用者ID。st_gid: 所有者的組ID。st_size: 普通檔案以位元組為單位的大小;包含等待某些特殊檔案的資料。st_atime: 上次訪問的時間。st_mtime: 最後一次修改的時間。st_ctime: 由作業系統報告的"ctime"。在某些系統上(如Unix)是最新的中繼資料更改的時間,在其它系統上(如Windows)是建立時間(詳細資料參見平台的文檔)。
sys模組
sys模組是與python解譯器互動的一個介面
sys.argv 命令列參數List,第一個元素是程式本身路徑sys.exit(n) 退出程式,正常退出時exit(0),錯誤退出sys.exit(1)sys.version 擷取Python解釋程式的版本資訊sys.path 返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值sys.platform 返回作業系統平台名稱
import systry: sys.exit(1)except SystemExit as e: print(e)
異常處理和status
import syscount = 1while count <10: print(count) if count == 8: sys.exit() count += 1print(‘ending‘)結果:12345678
json序列化模組
什麼叫序列化——將原本的字典、列表等內容轉換成一個字串的過程就叫做序列化。
比如,我們在python代碼中計算的一個資料需要給另外一段程式使用,那我們怎麼給?現在我們能想到的方法就是存在檔案裡,然後另一個python程式再從檔案裡讀出來。但是我們都知道,對於檔案來說是沒有字典這個概念的,所以我們只能將資料轉換成字典放到檔案中。你一定會問,將字典轉換成一個字串很簡單,就是str(dic)就可以辦到了,為什麼我們還要學習序列化模組呢?沒錯序列化的過程就是從dic 變成str(dic)的過程。現在你可以通過str(dic),將一個名為dic的字典轉換成一個字串,但是你要怎麼把一個字串轉換成字典呢?聰明的你肯定想到了eval(),如果我們將一個字串類型的字典str_dic傳給eval,就會得到一個返回的字典類型了。eval()函數十分強大,但是eval是做什麼的?e官方demo解釋為:將字串str當成有效運算式來求值並返回計算結果。BUT!強大的函數有代價。安全性是其最大的缺點。想象一下,如果我們從檔案中讀出的不是一個資料結構,而是一句"刪除檔案"類似的破壞性語句,那麼後果實在不堪設設想。而使用eval就要擔這個風險。所以,我們並不推薦用eval方法來進行還原序列化操作(將str轉換成python中的資料結構)
序列化的目的
1、以某種儲存形式使自訂對象持久化;2、將對象從一個地方傳遞到另一個地方。3、使程式更具維護性。
json
Json模組提供了四個功能:dumps、dump、loads、load
loads和dumps
Python模組之time、