1. 程式人生 > 實用技巧 >內建模組:os.path.hashlib模組

內建模組:os.path.hashlib模組

常用模組

  • time,datetime

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

      import time
      # 如何獲取一個時間戳       時間元年到現在經過的毫秒數   1970.1.1 00:00:00 ==元年
      print(time.time())    
      
      # 格式化時間物件
      print(time.gmtime())
      print(time.localtime())
      
      # 格式化時間物件和字串之前的轉換# 預設引數是當前時間戳
      s = time.strftime("%Y-%m-%d %H:%M:%S")
      print(s)
      
      # 時間字串轉化為時間物件
      time_obj = time.strptime("2010 10 10","%Y %m %d")
      print(time_obj)
      
      # 時間物件轉化為時間戳
      print(time.mktime(time.localtime()))
      
  • os,sys

    • import os
      # 和檔案操作相關 重新命名 刪除
      # os.remove(r'a.txt')
      # os.rename('a.txt', 'aa/b.txt')
      
      # 刪除目錄
      # os.removedirs('aa')
      
      # 使用shutil模組 可以刪除帶內容的目錄
      # import shutil
      # shutil.rmtree('aa')
      
      # 和路徑相關的操作,被封裝到了另一個模組 os.path
      # ret = os.path.dirname(r'/aa/bb/cc/a.txt')
      # print(ret)
      
      # ret1 = os.path.basename(r'/aa/bb/cc/a.txt')
      # print(ret1)# 把路徑和檔案切分開, 元組形式
      # res = os.path.split(r'/aa/bb/cc/a.txt')
      # print(res)
      
      # 拼接路徑
      # res = os.path.join(r'a:\bbb','cc','a.txt')
      # print(res)
      
      # 如果是/ 開頭的路徑,預設是在當前碟符下
      # res = os.path.abspath(r'/a/b/c')
      
      # # 如不是/開頭 是當前專案路徑
      # res = os.path.abspath(r'a/b/c')
      # print(res)
      
      # 判斷 當前是不是絕對路徑
      res = os.path.isabs(r'/aa/bb/cc/a.txt')
      res = os.path.isabs(r'a.txt')
      print(res)
      
      print(os.path.isfile(r'aa/b.txt'))
      print(os.path.isfile(r'aa/bb'))
      print(os.path.exists(r'aa/bb'))
      
      import sys
      ## print(sys.argv[0])# 指令碼名
      # print(sys.argv[1]) # 指令碼後面的第一個引數
      # arg1 = int(sys.argv[1])
      # arg2 = int(sys.argv[2])
      # print(arg1 + arg2)
      # 直譯器去尋找模組的路徑
      sys.pathprint(sys.modules)
      
  • hashlib, json ,pickle ,collections

    • json模組(javaScript Object Notation)java指令碼兌現標記語言

    • '''序列化:將記憶體中的資料轉化成位元組串 ,
      用以儲存在檔案或者通過網路傳輸 稱為序列化過程
      從檔案中或者網路中,轉化成記憶體中原來的資料型別,稱為反序列化過程
      '''
      # json :將資料轉化成字串 用於儲存或網路傳輸
      import json
      # print(json.dumps([1,0,1,0]))) 
      # 序列化  指定的物件轉化成json格式的字串  列表,int,字典
      # print(json.dumps((1,0,1)))          # 元組序列化後 變成列表# print(json.dumps((1010)),type(json.dumps((1010))))# print(json.dumps({'name':'我'}),type(json.dumps({'name':'我'})))# print(json.dumps({'name':'我'}),type(json.dumps({'name':'我'})))# print(json.dumps(set('abc')),type(json.dumps(set('abc'))))  # TypeError: Object of type 'set' is not JSON serializable##
      
      
      # 將json結果寫到檔案中
      # with open('a.txt',mode='wt',encoding='utf-8') as f:
      #     json.dump([1,2,3],f)res = json.dumps([1,2,3])
      	   print(json.loads(res))  
      	   
      # 反序列化# 元組反序列化變成列表
      res = json.dumps((1,2,3))
      print(json.loads(res))  
      
      # 反序列化# 從檔案傳序列化
      with open('a.txt',encoding='utf-8') as f:    
      ret = json.load(f)    
      print(ret,type(ret))
      
      # 總結:
      # json.dums(obj)    # 寫到記憶體
      # json.dums(obj,f) #  寫到檔案
      # json.loads(s)     # 將原本的資料型別返回來
      # json.load(f)      # 將檔案的字串 以資料型別的返回來
      
      
      # 多次寫多次讀
      with open('json.txt',mode='at',encoding='utf-8') as f:
          f.write(json.dumps([1,2,3]) + '\n')
          f.write(json.dumps([4,5,6]) + '\n')
      
      # 把分次序列化的json字串,反序列化回來
      with open('json.txt',mode='rt',encoding='utf-8') as f:
          res = json.loads(f.readline().strip())
          print(res)
          res1 = json.loads(f.readline().strip())
          print(res1)
      
    • hashlib 模組 *****************************************************

      封裝一些用於加密的類

      md5() 用於判斷和驗證,並非解密

      特點:

      • 把一個大的資料切分成不同的小塊,分別對不同的塊進行加密,在彙總結果,和直接對整體資料加密的結果是一致的
      • 單項加密,不可逆
      • 原始資料的一點小的變化,將導致結果非常大的差異
      # 獲取加密物件*****
      m = hashlib.md5()
      
      # 使用加密物件的update方法進行加密*****
      # m.update(b'adc')
      m.update('adc中文'.encode('utf-8'))
      
      # 通過hexdigest 獲取加密結果*****
      res = m.hexdigest()
      print(res)
      
      # 位元組加密結果
      res = m.digest()
      print(res)
      
      
      # 給一個數據加密
      # 驗證:用另一個數據加密結果 和第一次加密結果對比,
      # 一致:原文相同     不一致:原文不一致
      
      # 不同加密演算法,實際就是加密結果的長度不同
      m1 = hashlib.sha224()
      m1.update('adc中文'.encode('utf-8'))
      print(m1.hexdigest())