一、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下为"\r\n",Linux下为"\n"
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('\r[%-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'))