前提:dir,__all__,help,__doc__,__file__
dir:可以用来查看模块中的所有特性(函数,类,变量等)
>>> import copy >>> dir(copy) [‘Error‘, ‘PyStringMap‘, ‘_EmptyClass‘, ‘__all__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘_c opy_dispatch‘, ‘_copy_immutable‘, ‘_copy_with_constructor‘, ‘_copy_with_copy_met hod‘, ‘_deepcopy_atomic‘, ‘_deepcopy_dict‘, ‘_deepcopy_dispatch‘, ‘_deepcopy_lis t‘, ‘_deepcopy_method‘, ‘_deepcopy_tuple‘, ‘_keep_alive‘, ‘_reconstruct‘, ‘built ins‘, ‘copy‘, ‘deepcopy‘, ‘dispatch_table‘, ‘error‘, ‘name‘, ‘t‘, ‘weakref‘] >>> [x for x in dir(copy) if not x.startswith(‘_‘)] [‘Error‘, ‘PyStringMap‘, ‘builtins‘, ‘copy‘, ‘deepcopy‘, ‘dispatch_table‘, ‘erro r‘, ‘name‘, ‘t‘, ‘weakref‘]
__all__:(dir中有这个变量)这个变量中包含了一个列表。和我们使用dir加上列表推导式相似。
>>> copy.__all__ [‘Error‘, ‘copy‘, ‘deepcopy‘]
他定义了模块的公有接口,或者说他告诉解释器当我们使用
from copy import *
时,会导入模块的那些函数方法。__all__在编写模块是,可以过滤掉大多不需要的函数方法。若是没有__all__,使用import *会将除了以下划线开头的所有全局名称导入
help:获取帮助,提供日常需要的信息
>>> help(copy) Help on module copy: NAME copy - Generic (shallow and deep) copying operations. DESCRIPTION Interface summary: .... >>> help(copy.copy) Help on function copy in module copy: copy(x) Shallow copy operation on arbitrary Python objects. See the module‘s __doc__ string for more info.
引用了__doc__特性,事实上是使用了文档字符串(写在模块开头,或者函数开头的)
__file__:获取文件位置:便于查看文件源代码位置:
>>> copy.__file__ ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib\\copy .py‘
一.sys
sys.argv 命令行参数List,第一个元素是程序本身路径
import sys args = sys.argv[1:] #默认0是程序名 args.reverse() print(‘,‘.join(args)) D:\MyPython\day24\基础回顾\01装饰器>python test.py ag1 ag2 ag3 ag3,ag2,ag1
sys.exit(n) 退出程序,正常退出时exit(0)
>>> import sys >>> sys.exit()
sys.version 获取Python解释程序的版本信息 #python --version
>>> sys.version ‘3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)]‘
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
>>> sys.path [‘‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\pyth on35.zip‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35 \\DLLs‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\lib‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35‘, ‘C :\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib\\site-p ackages‘]
sys.platform 返回操作系统平台名称
>>> sys.platform ‘win32‘
sys.stdin 输入相关 有读取属性r 从屏幕中读取
>>> var = sys.stdin.read() aasddsa ^Z >>> var ‘aasddsa\n‘ >>> var = sys.stdin.read(5) dsad >>> var ‘dsad\n‘ >>>
sys.stdout 输出相关 有写入属性w 向屏幕中写入
>>> sys.stdout.write(‘dasf‘) dasf4 >>> sys.stdout.flush() #刷新当前屏幕 shell中无用
sys.stderror 错误相关 有写入属性w 向屏幕写入(会含有输出错误信息的信息长度)
print(sys.stderr) print(sys.stderr.write("errfawfa")) <_io.TextIOWrapper name=‘<stderr>‘ mode=‘w‘ encoding=‘UTF-8‘> 8 errfawfa
二,os
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: (‘.‘) os.pardir 获取当前目录的父目录字符串名:(‘..‘) os.makedirs(‘dir1/dir2‘) 可生成多层递归目录 os.removedirs(‘dirname1‘) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir(‘dirname‘) 生成单级目录;相当于shell中mkdir dirname os.rmdir(‘dirname‘) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir(‘dirname‘) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","new") 重命名文件/目录 os.stat(‘path/filename‘) 获取文件/目录信息 os.sep 操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 用于分割文件路径的字符串 os.name 字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
>>> sys.platform ‘win32‘ >>> os.name ‘nt‘
os.system("bash command") 运行shell命令,直接显示。用于运行外部程序
>>> os.system(‘ls -al‘) total 50565
os.environ 获取系统环境变量 在系统中高级环境变量Path设置中的数据 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素,就是返回上级目录
>>> os.path.dirname("c:/sys") ‘c:/‘ >>> os.path.dirname("c:/sys/windows/1.txt") ‘c:/sys/windows‘
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所指向的文件或者目录的最后修改时间 是时间戳
三:random
该模块包括返回随机数的函数。可以用于模拟或者产生随机输出的程序。
>>> random.__all__ [‘Random‘, ‘seed‘, ‘random‘, ‘uniform‘, ‘randint‘, ‘choice‘, ‘sample‘, ‘randrang e‘, ‘shuffle‘, ‘normalvariate‘, ‘lognormvariate‘, ‘expovariate‘, ‘vonmisesvariat e‘, ‘gammavariate‘, ‘triangular‘, ‘gauss‘, ‘betavariate‘, ‘paretovariate‘, ‘weib ullvariate‘, ‘getstate‘, ‘setstate‘, ‘getrandbits‘, ‘SystemRandom‘]
random.__all__
注意:事实上,所产生的数字都是伪随机数,也就是说他们看起来是完全随机的,实际上,他们是以一个可预测的系统作为基础。不过,已经很不错了。若是想实现真正的随机可以使用os中的urandom或者random中的SystemRandom
>>> random.random() #返回一个在0-之间的随机数 0.5134022843262868 >>> help(random.random) Help on built-in function random: random(...) method of random.Random instance random() -> x in the interval [0, 1). >>> random.randint(1,100) #返回一个在1,100之间的整数 20 >>> random.randrange(1,100) 80
四:hashlib
用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib
######### md5 ########
h2 = hashlib.md5() h2.update(bytes(‘123456‘, encoding=‘utf-8‘)) print(h2.hexdigest()) #是字符串十六进制 print(h2.digest()) #是字节byte型 通过.hex()可以转换为上面的字符串十六进制
补充:
digest()
>>> help(hashlib._hashlib.HASH.digest) Help on method_descriptor: digest(...) Return the digest value as a string of binary data. 返回一个bytes 八位一字节(ASCII),对于(编码的字符,若是ASCII中字符则直接显示,否则按照编码进行转换)b‘\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94‘
对于bytes编码的字符,若是ASCII中字符则直接显示,否则按照编码进行转换
>>> b = bytes("a",encoding="utf-8") >>> b b‘a‘ >>> b = bytes("a你",encoding="utf-8") >>> b b‘a\xe4\xbd\xa0‘
hexdigest()
>>> help(hashlib._hashlib.HASH.hexdigest) Help on method_descriptor: hexdigest(...) Return the digest value as a string of hexadecimal digits. 返回一个十六进制字符串str类型‘ea48576f30be1669971699c09ad05c94‘
-------------------------------------------------------------------------------------
digest()转hexdigest()
>>> h2.digest().hex()
-------------------------------------------------------------------------------------
hexdigest()转digest()
需要使用binascii模块
>>> help(binascii) Help on built-in module binascii: NAME binascii - Conversion between binary data and ASCII用于转换 --- 在二进制和ASCII码之间
binascii中a2b_hex
>>> help(binascii.a2b_hex) Help on built-in function a2b_hex in module binascii: a2b_hex(hexstr, /) Binary data of hexadecimal representation.将十六进制字符串转化为二进制用bytes类型显示(ASCII) hexstr must contain an even number of hex digits (upper or lower case). This function is also available as "unhexlify()".其中十六进制必须是偶数
一般我们直接使用十六进制字符串,直接是32位字符串
转换成功:
>>> binascii.a2b_hex(h2.hexdigest()) b‘\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94‘ >>> h2.digest() b‘\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94‘ >>> h2.hexdigest() ‘ea48576f30be1669971699c09ad05c94‘ >>> binascii.a2b_hex(h2.hexdigest()) b‘\xeaHWo0\xbe\x16i\x97\x16\x99\xc0\x9a\xd0\\\x94‘
-------------------------------------------------------------------------------------
其中md5算法时不能被反解的,但是可以被撞库,获取密码。
更加安全的方法是在加密算法中添加自定义key再来进行加密:
没有key时:
>>> h1 = hashlib.md5(bytes("123456",encoding="utf-8")) >>> h1.hexdigest() ‘e10adc3949ba59abbe56e057f20f883e‘
上面的数据很容易被撞库获取出来密码。尤其是这些简单的
-------------------------------------------------------------------------------------
使用自定义key时
>>> h2 = hashlib.md5(bytes("asd",encoding="utf-8")) >>> h2.update(bytes("123456",encoding="utf-8")) >>> h2.hexdigest() ‘1e55dbf412cb74d5e2c21fb6452408c7‘
相当于使用两次update:
>>> h3 = hashlib.md5() >>> h3.update(byte("asd",encoding="utf-8")) >>> h3.update(bytes("123456",encoding="utf-8")) >>> h3.hexdigest() ‘1e55dbf412cb74d5e2c21fb6452408c7‘
-------------------------------------------------------------------------------------
######## sha1 ########(这些算法的使用和md5相似)
h = hashlib.sha1() h.update(bytes(‘123456‘, encoding=‘utf-8‘)) print(h.hexdigest())
SHA1, SHA224, SHA256, SHA384, SHA512使用时一样的
-------------------------------------------------------------------------------------
python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密
import hmac h = hmac.new(bytes(‘asd‘,encoding="utf-8")) h.update(bytes(‘123456‘,encoding="utf-8")) print(h.hexdigest())#548b23c538c78d7053e3231919f78f36 与上面自定义key得出的密码不一样,说明在内部对key和内容又进行了处理
五:re正则模块
基础了解:正则表达式了解
原文地址:https://www.cnblogs.com/ssyfj/p/8877931.html