Python-常用模塊(持續更新)

常用模塊:

  • 須知:import 模塊名 導入模塊

random模塊:

  • '''
    random.random()  # 獲取[0.0,1.0)範圍內的一個浮點數
    random.randint(a, b)  # 獲取這個[a,b]區間範圍內的一個整數
    random.uniform(a, b)  # 獲取[a,b]區間範圍內的浮點數
    random.shuffle(x)  # 把 參數指定的數據中的元素 打亂,參數必須是一個可變的數據類型
    random.sample(x,k)  # 從x中隨機抽取k個數據,組成一個列表返回
    ''
  • 練習

    • 把參數指定的數據中的元素 打亂 參數必須時一個可變的數據類型

      • 可變(不可哈希)的數據類型:list dict set -------修改後,原對象發生變化

        不可變(可哈希)的數據類型: str bool int tuple(元組) -----修改原對象,不會對原對象產生任何改變

    • lst = list(range(10))  # ---[0,1,2,3,4,5,6,7,8,9]
      

    random.shuffle(lst)
    print(lst)

    
    
    + 從x中隨機抽取k個數據,組成一個列表返回
    
    + ```python
    x = (1, 2, 3)
    # 通過sample變相打亂
    l = random.sample(x, len(x))
    print(l)
    

time模塊:

  • 封裝了獲取時間戳和字符串形式的時間的一些方法

    • 1.獲取 時間戳
      • 時間戳:從時間元年(1970.1.1 00:00:00)到現在經過的秒數
    print(time.time()) # 1581688611.4762974
    
    • 2.獲取格式化時間對象:九個字段組成

      • 默認參數是當前系統的時間戳

      • print(time.gmtime())  # GMT:
        # time.struct_time(tm_year=2020, tm_mon=2, tm_mday=14, tm_hour=13, tm_min=56, tm_sec=51, tm_wday=4, tm_yday=45, tm_isdst=0)
        print(time.localtime())  # 當地時間
        # time.struct_time(tm_year=2020, tm_mon=2, tm_mday=14, tm_hour=21, tm_min=56, tm_sec=51, tm_wday=4, tm_yday=45, tm_isdst=0)
        
    • 3.時間元年過一秒後對應的時間對象

      • print(time.gmtime(1))
        # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)
        
    • 4.格式化時間對象和字符串之間的轉換

      • 將時間對象轉換成時間字符串

      • s = time.strftime("%Y %m %d %H:%M:%S")  # 年月日 時 分 秒
        print(s)  # 2020 02 14 21:56:51
        
    • 5.把時間字符串轉換成時間對象

      • time_obj = time.strptime('2010 10 10', '%Y %m %d')
        print(time_obj)
        # time.struct_time(tm_year=2010, tm_mon=10, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=283, tm_isdst=-1)
        
    • 時間對象 —> 時間戳

      • t1 = time.localtime()  # 時間對象
        t2 = time.mktime(t1)  # 獲取對應的時間戳
        print(t2)  # 1581689092.0
        
  • 時間對象,時間戳,時間字符串的表示方法
    時間對象(結構化時間):time.struct_time(tm_year=2020, tm_mon=1, tm_mday=9, tm_hour=11, tm_min=16, tm_sec=47, tm_wday=3, tm_yday=9, tm_isdst=0)
    時間戳:1578568607.0
    時間字符串(格式化時間):2020 01 09 19:16:47
    
    • 4.time.sleep(secs)
      (線程)推遲指定的時間運行。單位爲秒。
      

總結:

  • 如有問題,查看上述time模塊
# # 格式化時間 ---->  結構化時間
# ft = time.strftime('%Y/%m/%d %H:%M:%S')
# print(ft)  # 2020/02/14 21:49:14
# st = time.strptime(ft,'%Y/%m/%d %H:%M:%S')
# print(st)  # time.struct_time(tm_year=2020, tm_mon=2, tm_mday=14, tm_hour=21, tm_min=49, tm_sec=14, tm_wday=4, tm_yday=45, tm_isdst=-1)
# # 結構化時間 ---> 時間戳
# t = time.mktime(st)
# print(t)  # 1581688154.0
#
# # 時間戳 ----> 結構化時間
# t = time.time()
# st = time.localtime(t)
# print(st)  # time.struct_time(tm_year=2020, tm_mon=2, tm_mday=14, tm_hour=21, tm_min=49, tm_sec=14, tm_wday=4, tm_yday=45, tm_isdst=0)
# # 結構化時間 ---> 格式化時間
# ft = time.strftime('%Y/%m/%d %H:%M:%S',st)
# print(ft)  # 2020/02/15 21:56:08

序列化模塊

json模塊

  • JavaScript Object Notation:Java腳本對象標記語言-----將大部分數據類型變成字符串,但集合(set)不可以

  • 已經成爲一種簡單的數據交換格式

  • 不完全的序列化----轉化成 字符串的數據類型

1.json.dumps從內存到內存,在可轉的情況下轉化成字符串類型

  • 列表序列化
s = json.dumps([1, 2, 3])
print(type(s))  # <class 'str'>  把指定的對象轉換成json格式的字符串
print(s)  # 輸出[1, 2, 3]     實際上'[1, 2,  3]'
  • 元組可以json序列化,序列化後變成列表,但數據類型使字符串
s = json.dumps((1,2, 3))
print(s)  # [1, 2, 3]---------字符串類型   <class 'str'>

res = json.dumps(10)
print(res)  # 10 -----'10'    <class 'str'>
  • 字典的序列化
res = json.dumps({'name':'Andy', 'age':10})
print(res)  # {"name": "Andy", "age": 10}  <class 'str'>
  • set不能序列化
res = json.dumps(set('abc'))
print(res)  # TypeError: Object of type set is not JSON serializable

hashlib模塊

  • hashlib模塊-學習:
    • 封裝一些用來加密的一些類:

    • md5()----不可逆—王小云測算可逆

    • 注意:加密的目的:用於判斷和驗證,而並非解密,

    • 特點:

      • 1.把一個大的數據,切分成不同快,分別對不同的快進行加密,再彙總的結果,和直接對整體數據加密的結果是一樣的

      • 2.單向加密,不可逆,

      • 3.原始數據的一點小的變化,將導致結果的非常大的差異,'雪崩’效應

'''md5加密算法:
    給一個數據加密的三大步驟:
        1.獲取一個加密對象(md5......)
        2.使用update方法進行加密,加密方法可以調用多次
        3.通常通過hexdigest獲取加密結果,或digest()方法獲取字節串
'''
# 1.獲取一個加密對象
m = hashlib.md5()

# 2.使用加密對象的update,進行加密
m.update(b'abc')  # 字節類型的參數     b''裏面不能加中文
m.update('abc中文'.encode('utf-8'))

# 3.(1)通過hexdigest獲取加密的結果
res = m.hexdigest()
print(res)  # 1af98e0571f7a24468a85f91b908d335   ---字符串類型   ---16進制(四個二進制位)
# 3.(2)通過digest()方法加密結果獲取字節串
res = m.digest()
print(res)  # b'\x1a\xf9\x8e\x05q\xf7\xa2Dh\xa8_\x91\xb9\x08\xd35'
  • 給一個數據加密

    • 驗證:用另一個數據加密的結果第一次加密的結果進行對比
    • 如果加密結果一樣,說明原文相同,如果不相同,說明原文不同
  • 不同加密算法,加密結果的長度不同

s = hashlib.sha224()
s.update('abc'.encode('utf-8'))
print(s.hexdigest())  # 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7

print(len(hashlib.md5().hexdigest()))  # 32個十六進制位
print(len(hashlib.sha256().hexdigest()))  # 64個十六進制位
  • 創建加密對象時,可以指定參數,成爲salt 通過對原始口令加一個複雜字符串來實現,俗稱“加鹽
m = hashlib.md5(b'abc')
print(m.hexdigest())  # 900150983cd24fb0d6963f7d28e17f72
#
m = hashlib.md5()
m.update('abc'.encode('utf-8'))
print(m.hexdigest())  # 900150983cd24fb0d6963f7d28e17f72

m = hashlib.md5(b'abc')
m.update('ccc'.encode('utf-8'))
print(m.hexdigest())  # bd1e6dd82ca1e4a0408d653407d13c85
  • 把一個大的數據,切分成不同快,分別對不同的快進行加密,再彙總的結果,和直接對整體數據加密的結果是一樣的
m = hashlib.md5()
m.update('abc'.encode('utf-8'))
m.update('def'.encode('utf-8'))
print(m.hexdigest())  # e80b5017098950fc58aad83c8c14978e

m = hashlib.md5()
m.update('abcdef'.encode('utf-8'))
print(m.hexdigest())  # e80b5017098950fc58aad83c8c14978e
  • 註冊登錄程序
    • 用戶選擇
def get_md5(username, passwd):
    # 獲取加密對象
    m = hashlib.md5()
    # 使用加密對象的update,進行加密
    m.update(username.encode('utf-8'))
    m.update(passwd.encode('utf-8'))
    return m.hexdigest()

def register(username, passwd):
    # 獲取返回值
    res = get_md5(username, passwd)
    # 寫入文件  利用a模式操作文件,那麼它會在文件的最後面追加內容
    with open('login', 'a') as f:
        f.write(res)
        f.write('\n')
def login(username, passwd):
    # 獲取當前登錄信息的加密結果
    res = get_md5(username, passwd)
    # 讀文件,進行對比
    with open('login', 'r') 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章