17、hashlib、subprocess、os、sys、configparser

一、hashlib模块

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

​ 1、如果传入的内容与采用的算法一样,那么得到的hash值一定一样

​ 2、只要采用的算法是固定的,hash值的长度就是固定的,不会随着内容的

​ 增多而变长

​ 3、hash值是不可逆的,即不能通过hash值反解出内容是什么

​ 1+2==》校验文件的完整性

​ 1+3==》加密

import hashlib

m = hashlib.md5()  # m 为hash工厂
m.update('hello'.encode('utf-8'))#接受的是byles类型
m.update('你好'.encode('utf-8'))
m.update('我是'.encode('utf-8'))
m.update('你爸爸'.encode('utf-8'))  # 可以不断的增加
res = m.hexdigest()  # 拿到的是“hello 你好 我是 你爸爸”
print(res)

m = hashlib.md5()  # m 为hash工厂
m.update('hello你好我是你爸爸'.encode('utf-8'))
res2 = m.hexdigest()
print(res2)
# 输出结果:
# 0b5a3045f24819e9448c8ab9d660f017
# 0b5a3045f24819e9448c8ab9d660f017

如果文件较大,可以选取样本校验

import hashlib

f=open('a.txt',mode='rb')
f.seek()#校验较大的文件时,选取几个样本点去校验
f.read(2000)
m.update()
m.hexdigest()

密码加盐

import hashlib

m = hashlib.md5()

m.update("天王盖地虎".encode('utf-8'))
m.update("123egon".encode('utf-8'))
m.update("egon一米五".encode('utf-8'))
print(m.hexdigest())

二、subprocess模块

​ 用来执行系统命令的

​ 文件的命名方式也要同变量名一样,不要选和python里函数一样的名字

​ 我命名的文件为subprocess,调用的subprocess的时候报错了QAQ

import subprocess
import time

obj = subprocess.Popen("tassadfsadfklist",
                       shell=True,
                       stdout=subprocess.PIPE,#正确管道
                       stderr=subprocess.PIPE#错误管道
                       )

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

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

print(stdout_res.decode('gbk'))
print(stderr_res.decode('gbk'))

三、os与sys模块

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"
",Linux下为"
"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.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不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

sys模块

1 sys.argv           命令行参数List,第一个元素是程序本身路径
2 sys.exit(n)        退出程序,正常退出时exit(0)
3 sys.version        获取Python解释程序的版本信息
4 sys.maxint         最大的Int值
5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6 sys.platform       返回操作系统平台名称

打印进度条

import time


def progress(percent):
    if percent > 1:
        percent = 1
    res = int(50 * percent) * '#'
    print('
[%-50s] %d%%' % (res, int(100 * percent)), end='')


recv_size = 0
total_size = 102555
while recv_size < total_size:
    time.sleep(0.1)
    recv_size += 1024
    percent = recv_size / total_size
    progress(percent)

四、configparser模块

config.ini

# 注释1
; 注释2

[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31
[section2]
k1 = v1
k2 = 1.11
import configparser

config = configparser.ConfigParser()
config.read('config.ini')  # 读取配置文件
# 获取sections
print(config.sections())
# 获取某一section下的所有的options
print(config.options(('section1')))
# 获取litems
print(config.items('section1'))
# 获取指定的东西
print(config.get('section1', 'user'))
# 获取的是str,可以转换数字类型
print(config.getint('section1', 'age'))
# 获取布尔值,兼容josn
print(config.getboolean('section1', 'is_admin'))
# 获取浮点型
print(config.getfloat('section2', 'k2'))
原文地址:https://www.cnblogs.com/zhaokunhao/p/14247610.html