常用模組介紹 time datetime os sys hashlib json pickle collections
阿新 • • 發佈:2020-07-18
常用模組介紹 time datetime os sys hashlib json pickle collections
-
time : 和時間相關
封裝了獲取時間戳和字串的時間段一些方法。
- time.time() : 獲取時間戳
- time.gmtime([seconds]) : 獲取格式化時間:是九個欄位組成的
- time.localtime(seconds) : 獲取格式化時間:是九個欄位組成的
- time.mktime(t) : 時間物件--> 時間戳
- time.strftime(format[,t]) : 把時間物件格式化轉化為字串
- time.strptime(str,format) : 把時間字串轉換為事件物件
import time #獲取時間戳 #時間戳 ::從時間元年(1970 1 1 00:00:00)到現在經過的秒數。 # print(time.time())#1594641761.2810633 # #獲取格式化時間物件:是九個欄位組成的。 # #預設引數是當前系統時間的時間戳。 # print(time.gmtime())# # print(time.localtime()) # print(time.gmtime(1))#時間元年過一秒後,對應的時間物件 # # #事件物件 -> 時間戳 # t1 = time.localtime()#時間物件 # t2 = time.mktime(t1)#轉化為對應的時間戳 # print(t2) # print(time.time()) #格式化時間物件和字串之間的轉換 s = time.strftime('year: %Y %m %d %H:%M:%S') print(s) #把時間字串轉換成時間物件 time_obj = time.strptime('2020 02 20','%Y %m %d') print(time_obj)
time 模組三大物件之間的轉換關係:
其他方法: time.sleep(x) : 休眠x 秒。
-
datetime : 日期時間相關
包含了和日期時間相關的類,主要有:
- date : 需要年,月,日三個引數
- time:需要時,分,秒三個引數
- datetime:需要年,月,日,時,分,秒六個引數.
- timedelta:需要一個時間段.可以是天,秒,微秒.
獲取以上型別的物件,主要作用是和時間段進行數學運算。
timedelta可以和以下三個類進行數學運算:
- datetime.time, datetime.datetime,datetime.timedelta
練習:
顯示當前日期前三天是什麼時間.
顯示任意一年的二月份有多少天.
from datetime import datetime
s = datetime.now()#datetime中含有datetime 類,通過from datetime import datetime匯入的才是datetime這個類。##datetime.datetime.now()
import datetime
td = datetime.timedelta(days=3)
res = s - td
print(res)
#普通演算法:根據年份計算是否是閏年 是:29天,否:28天
#用datetime 模組
#首先創建出指定年份的3月1號,然後讓它往前走一天
import datetime
year = int(input('輸入年份:'))
#創建出指定年份的date物件
d = datetime.date(year, 3, 1)
#建立一天的時間段
td = datetime.timedelta(days=1)
res = d - td
print(res.day)
-
os 模組 和作業系統的模組,主要是檔案刪除,目錄刪除,重新命名等操作
import os #和檔案操作相關,重新命名,刪除 #os.rename('www666.txt','666.txt') #os.remove('666') #刪除目錄,必須是空目錄 # os.removedirs('aa') # # #使用shutil 模組可以刪除帶內容的目錄 # import shutil # shutil.rmtree('aa') #和路徑相關的操作,被封裝到另一個子模組中:os.path # res = os.path.dirname(r'd:/aaa/bbb/ccc/a.txt')#不判斷路徑是否存在 # print(res)#d:/aaa/bbb/ccc # # #獲取檔名 # res = os.path.basename(r'd:/aaa/bbb/ccc/a.txt') # print(res) # # #把路徑中的路徑名和檔名切分開,結果是元祖。 # res = os.path.split(r'd:/aaa/bbb/ccc/a.txt') # print(res) # # #拼接路徑 # path = os.path.join('d:\\','aaa','bbb','ccc','a.txt') # print(path) # # #如果是/開頭的路徑,預設在當下碟符 # res =os.path.abspath(r'/a/b/x') # #如果不是以/開頭,預設當前路徑 # res1 = os.path.abspath(r'a/b/x') # print(res1) # 判斷 print(os.path.isabs('a.txt')) print(os.path.isdir('d:/aaaa.txt')) # 檔案不存在.False print(os.path.exists('d:/a.txt')) print(os.path.isfile('d:/asssss.txt'))# 檔案不存在.False
-
sys 模組
主要是兩個方面:
- 直譯器執行時獲取引數:sys.argv[x]
- 直譯器執行時尋找模組的路徑:sys.path
例如:有a.py 內容如下:
import sys print()print('指令碼名稱:',sys.argv[0]) print('第一個引數:',sys.argv[1]) print('第二個引數:',sys.argv[2]) 指令碼方式執行: python a.py hell world
-
json 模組
JavaScript Object Notation :java指令碼兌現標記語言。
已經成為一種簡單的資料交換格式
序列化:將其他資料格式轉化成json 字串的過程
反序列化: 將json 字串轉換其他資料型別的過程
涉及到的方法:
- json.dumps(obj): 將obj轉換成json字串返回到記憶體中。
- json.dumps(obj,fp): 將obj轉換成json 字串並儲存在fp 指向的檔案中。
- json.loads(s) : 將記憶體中的json 字串轉換成對應的資料型別物件。
- json.load(f) : 從檔案中讀取json字串,並轉換回原來的資料型別。
注意:
- json並不能序列化所有的資料型別:例如:set
- 元祖型別經過json序列化後,變成列表資料型別。
- json檔案通常是一次性寫入,一次性讀取。但是檔案本身的方式實現:一行儲存一個序列json字串,在反序列化是,按行反序列化即可。
記憶體中的資料:結構化的資料
磁碟上的資料:線性資料。
序列化比喻:
-
pickle模組
python 專用的序列化模組
和json 的方法一致
區別在於:
json: 1.不是所有的資料型別都可以序列化,結果是字串。 2.不能多次對同一個檔案序列化。 3.json資料可以跨語言 pickle: 1.所有的python序列都能序列化,結果是位元組串。 2.可以多次對同一個檔案序列化 3.不能跨語言
-
hashlib模組
封裝一些用於加密的類
md5(),……
加密的目的:用於判斷和驗證,而並非解密。
特點:
- 把一個大的資料,切分成不同塊,分別對不同的塊進行加密,再彙總的結果,和直接對整體資料加密的結果是一致的。
- 單向加密,不可逆。
- 原始資料的一點小的變化,將導致結果的非常大的差異,“雪崩”效應。
#註冊,登入程式 def get_md5(username,passwd): m = hashlib.md5() m.update(username.encode('utf-8')) m.update(username.encode('utf-8')) return m.hexdigets() def register(usname,passwd): #加密 res = get_md5(username,passwd) #寫入檔案 with open('login',mode='at',encoding='utf-8') as f: f.write(res) f.write('\n') def login(username,passwd): #獲取當前登入資訊的加密結果 res = get_md5(username,passwd) #讀檔案,和其中的資料進行對比 with open('login',encoding='utf-8',mode='rt') as f: for line in f: if res ==line.strip(): return True else: return False while True: op = int(input('1.註冊 2.登入 3.退出')) if op == 1: username = input('輸入使用者名稱: ') passwd = input('輸入密碼: ') register(username,passwd) elif op ==2 : username = input("輸入使用者名稱:") passwd = input("輸入密碼:") res = login(username,passwd) if res: print('登入成功') else: print('登入失敗 ') elif op == 3: break
不同的加密物件,結果長度不同,長度越長,越耗時.常用的是md5.