標籤:pass env string etc 命令 選擇 print com day
一、time模組
表示時間的三種方式:
時間戳記:數字(電腦能認識的)
時間字串:t=‘2012-12-12‘
結構化時間:time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=8, tm_min=4, tm_sec=32, tm_wday=1, tm_yday=220, tm_isdst=0)像這樣的就是結構化時間
#time模組的常用方法及三種時間之間的轉換import time# 對象:對象.方法# ----------------------------------# 1.時間戳記(數字):給電腦的看的print(time.time())#目前時間的時間戳記print(time.localtime())#結構化時間對象s=time.localtime() #當前的結構化時間對象(utc時間)print(s.tm_year)s2=time.gmtime() #這個和localtime只是小時不一樣print(s2)#-----------------------------------# 2.時間的轉換print(time.localtime(15648461))#把時間戳記轉換成結構化時間t=‘2012-12-12‘ #這是一個字串時間print(time.mktime(time.localtime()))#將結構化時間轉換成時間戳記print(time.strftime("%Y-%m-%d",time.localtime()))#將結構化時間轉換成字串時間print(time.strftime(‘%y/%m/%d %H:%M:%S‘))#小寫y是取得年的後兩位print(time.strptime(‘2008-03-12‘,"%Y-%m-%d"))#將字串時間轉換成結構化時間
#python中時間日期格式化符號:%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 當前時區的名稱%% %號本身
time.strftime(‘格式定義‘,‘結構化時間’) 結構化時間參數若不傳,則顯示目前時間
print(time.strptime(‘2008-03-12‘,"%Y-%m-%d"))print(time.strftime(‘%Y-%m-%d‘))print(time.strftime("%Y-%m-%d",time.localtime(15444)))
asctime和ctime方法
print(time.asctime(time.localtime(150000)))print(time.asctime(time.localtime()))# time.ctime(時間戳記)如果不傳參數,直接返回目前時間的格式化字串print(time.ctime())print(time.ctime(150000))
二、random模組
# random的方法import random# ----------------------------# 1.隨機小數print(random.random()) #大於0且小於1之間的隨機小數print(random.uniform(1,3)) #大於1且小於3的隨機小數# ----------------------------# 2.隨機整數print(random.randint(1,5)) #大於1且小於等於5之間的整數print(random.randrange(1,10,2)) #大於等於1且小於3之間的整數(且是所有的奇數)# ----------------------------# 3.隨機播放一個返回print(random.choice([1,‘23‘,[4,5]]))# ----------------------------# 4.隨機播放返回多個print(random.sample([1,‘23‘,[4,5]],2)) #列表元素任意兩個組合# ----------------------------# ----------------------------# 5.打亂列表順序item=[1,5,2,3,4]random.shuffle(item) #打亂次序print(item)
# 驗證碼小例子(這個只是產生隨機的四位元字)# 方法一、# l=[]# for i in range(4):# l.append(str(random.randint(0,9)))# print(‘‘.join(l))# print(l)# 方法二# print(random.randint(1000,9999))# 驗證碼升級版# 要求:首次要有數字,其次要有字母,一共四位,可以重複# chr(65-90)#a-z# chr(97-122)#A-Z方法一# num_list = list(range(10))# new_num_l=list(map(str,num_list))#[‘0‘,‘1‘...‘9‘]# l=[] #用來存字母# for i in range(65,91):# zifu=chr(i)# l.append(zifu) #[‘A‘-‘Z‘]# new_num_l.extend(l) #要把上面的數字和下面的字母拼在一塊# print(new_num_l)# ret_l=[] #存產生的隨機數字或字母# for i in range(4): #從new_num_l裡面選數字選擇四次就放到了ret_l裡面)# ret_l.append(random.choice(new_num_l))# # print(ret_l)# print(‘‘.join(ret_l)) #拼成字串方法二# import random# def myrandom():# new_num_l=list(map(str,range(10)))# l=[chr(i) for i in range(65,91)]# new_num_l.extend(l)# ret_l=[random.choice(new_num_l) for i in range(4)]# return ‘‘.join(ret_l)# print(myrandom())方法三import randoml=list(str(range(10)))+[chr(i) for i in range(65,91)]+[chr(j) for j in range(97,122)]print(‘‘.join(random.sample(l,4)))
三、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) 運行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.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)是最新的中繼資料更改的時間,<br>在其它系統上(如Windows)是建立時間(詳細資料參見平台的文檔)。
四、sys模組
sys模組是與python解譯器互動的一個介面
# sys模組import sysprint(sys.argv) #實現從程式外部向程式傳遞參數。(在命令列裡面輸開啟路徑執行)name=sys.argv[1] #命令列參數List,第一個元素是程式的本身路徑password = sys.argv[2]if name==‘egon‘ and password == ‘123‘: print(‘繼續執行程式‘)else: exit()sys.exit()#退出程式,正常退出時exit(0)print(sys.version)#擷取python解釋的版本資訊print(sys.maxsize)#最大能表示的數,與系統多少位有關print(sys.path)#返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值print(sys.platform)#返回作業系統平台名稱
五、序列化模組
1.什麼是序列化-------將原本的字典,列表等內容轉換成一個字串的過程就叫做序列化
2.序列化的目的
1.以某種儲存形式使自訂對象持久化
2.將對象從一個地方傳遞到另一個地方
3.使程式更具維護性
json
Json模組提供了四個功能:dumps、loads、dump、load
# dumps和loadsimport jsondic={‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}print(type(dic))str_dic = json.dumps(dic) #將字典轉換成字串,轉換後的字典中的元素是由雙引號表示的print(str_dic,type(str_dic))#{"k1": "v1", "k2": "v2", "k3": "v3"} <class ‘str‘>dic2 = json.loads(str_dic)#將一個字串轉換成字典類型print(dic2,type(dic2))#{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘} <class ‘dict‘>list_dic = [1,[‘a‘,‘b‘,‘c‘],3,{‘k1‘:‘v1‘,‘k2‘:‘v2‘}]str_dic = json.dumps(list_dic) #也可以處理嵌套的資料類型print(type(str_dic),str_dic) #<class ‘str‘> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]list_dic2 = json.loads(str_dic)print(type(list_dic2),list_dic2) #<class ‘list‘> [1, [‘a‘, ‘b‘, ‘c‘], 3, {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}]
# dump和loadimport jsonf=open(‘json_file‘,‘w‘)dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}json.dump(dic,f)# #dump方法接收一個檔案控制代碼,直接將字典轉換成json字串寫入檔案f.close()f = open(‘json_file‘)dic2 = json.load(f) #load方法接收一個檔案控制代碼,直接將檔案中的json字串轉換成資料結構返回f.close()print(type(dic2),dic2)
pickle
json 和 pickle 模組
json:用於字串和python資料類型之間進行轉換
pickle:用於python特有的類型和python的資料類型進行轉換
# pickle的dumps,sump和loads,load方法# --------------------------import pickle# dic= {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}# str_dic=pickle.dumps(dic)# print(str_dic) #列印的是bytes類型的二進位內容## dic2 = pickle.loads(str_dic)# print(dic2) #有吧字典給轉換回來了import timestruct_time = time.localtime(1000000000)print(struct_time)f = open(‘pickle_file‘,‘wb‘)pickle.dump(struct_time,f)f.close()f = open(‘pickle_file‘,‘rb‘)struct_time2 = pickle.load(f)print(struct_time.tm_year)
shelve
shelve也是python提供給我們的序列化工具,比pickle用起來更簡單一些。
shelve只提供給我們一個open方法,是用key來訪問的,使用起來和字典類似。
# shelve模組import shelvef = shelve.open(‘shelve_file‘)f[‘key‘] = {‘int‘:10, ‘float‘:9.5, ‘string‘:‘Sample data‘} #直接對檔案控制代碼操作,就可以存入資料f.close()import shelvef1 = shelve.open(‘shelve_file‘)existing = f1[‘key‘] #取出資料的時候也只需要直接用key擷取即可,但是如果key不存在會報錯f1.close()print(existing)
這個模組有個限制,它不支援多個應用同一時間往同一個DB進行寫操作。所以當我們知道我們的應用如果只進行讀操作,我們可以讓shelve通過唯讀方式開啟DB
mport shelvef = shelve.open(‘shelve_file‘, flag=‘r‘)existing = f[‘key‘]f.close()print(existing)
由於shelve在預設情況下是不會記錄待持久化對象的任何修改的,所以我們在shelve.open()時候需要修改預設參數,否則對象的修改不會儲存。
# 設定writebackimport shelvef1 = shelve.open(‘shelve_file‘)print(f1[‘key‘])f1[‘key‘][‘new_value‘] = ‘this was not here before‘f1.close()f2 = shelve.open(‘shelve_file‘, writeback=True)print(f2[‘key‘])f2[‘key‘][‘new_value‘] = ‘this was not here before‘f2.close()
writeback方式有優點也有缺點。優點是減少了我們出錯的機率,並且讓對象的持久化對使用者更加的透明了;但這種方式並不是所有的情況下都需要,首先,使用writeback以後,shelf在open()的時候會增加額外的記憶體消耗,並且當DB在close()的時候會將緩衝中的每一個對象都寫入到DB,這也會帶來額外的等待時間。因為shelve沒有辦法知道緩衝中哪些對象修改了,哪些對象沒有修改,因此所有的對象都會被寫入。
python全棧開發【第十篇】Python常用模組二(時間、random、os、sys和序列化)