博客园

3、hashlib&subprocess&configparserh和os

💣💣💣💣💣 hashlib算法和加密 💣💣💣💣💣

hash算法:传入一段内容会得到一段hash值,hash有三大特点

  1、如果只传入的内容和采用的算法一样,那么得到的hash值一定是一样的  
  2、只要采用的算法是固定的,hash的长度就固定,和内容大小无关
  3、hash值不可逆,不能通过hash反解出内容是什么
  1+2————>可校验文件的完整性,接受到的hash值和自下载后算得的hash值一样,就说完整的
  1+3---->加密文件或账户等

小例子

  import hashlib
  m = hashlib.md5()
  m.update('你好'.encode('utf-8))
  print(m.hexdigest())>>>>>> 43b2fa0da902a2d9175fb4d4b858e5d5
  
  with open(r'a.txt',mode = 'rb')as f:
        for line in f:
              m.update(line)
        res = m.hexdigest()
        print(res)

💣💣hash进阶版验证文件,分段验证,针对大文件💣💣

  import os
  import sys
  import hashlib
  def check_large_file_md5()
        if sys.argv[1]:
              if os.path.exists(sys.argv[1]):
                    m = hashlib.md5()
                    with open(sys.argv[1],mode='rb')as f:
                          for i in range(4):
                          m.update(f.read(200))
                          f.seek(1024000000,1)
                    print(m.hexdigest())
              else:
                    print('路径错误’)
        else:
              print('参数错误')
 if___name__=="__main__:
        check_large_file_md5()

💣💣💣💣💣 subprocess管道💣💣💣💣💣

  import subprocess
  import time

  obj = subprocess.Popen("tasfklist",
        shell=True,
        stdout=subprocess.PIPE,    正确时会运行
        stderr=subprocess.PIPE   tasklist正确时不返回
        )

  print("=============>", obj)

  stdout_res = obj.stdout.read()
  stderr_res = obj.stderr.read()

  print(stdout_res.decode('gbk')) windows系统需要解码gbk格式
  print(stderr_res.decode('gbk'))

os路径处理

  推荐使用
  import os
  具体应用
  import os,sys
  possible_topdir = os.path.normpath(os.path.join(
      os.path.abspath(__file__),
      os.pardir, #上一级
      os.pardir,
      os.pardir
  ))
  sys.path.insert(0,possible_topdir)

configparser模块

  # 注释1
  ; 注释2
  
  [section1]
  k1 = v1
  k2:v2
  user=egon
  age=18
  is_admin=true
  salary=31
  [section2]
  k1 = v1

代码
import configparser

  config=configparser.ConfigParser()
  config.read('a.cfg')

  #查看所有的标题
  res=config.sections() #['section1', 'section2']
  print(res)

  #查看标题section1下所有key=value的key
  options=config.options('section1')
  print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']

  #查看标题section1下所有key=value的(key,value)格式
  item_list=config.items('section1')
  print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age',     '18'), ('is_admin', 'true'), ('salary', '31')]

  #查看标题section1下user的值=>字符串格式
  val=config.get('section1','user')
  print(val) #egon

  #查看标题section1下age的值=>整数格式
  val1=config.getint('section1','age')
  print(val1) #18

  #查看标题section1下is_admin的值=>布尔值格式
  val2=config.getboolean('section1','is_admin')
  print(val2) #True

  #查看标题section1下salary的值=>浮点型格式
  val3=config.getfloat('section1','salary')
  print(val3) #31.0
posted @ 2021-01-08 16:05  小刘学python  阅读(80)  评论(0编辑  收藏  举报