目录
time
random
os
sys
shutil
shelve
xml
yamal
configparser
hashlib
logging
math
urlib
getpass
subprocess
json
pickle
traceback
itertools
hmac
eval
time
time.process_time()测量处理器运算时间
time.altzone#返回与utc时间的时间差,以秒计算
time.asctime() #返回时间格式
time.localtime()#当前本地时间
time.time())#(获取时间戳)
time.gmtime(time.time()-800000))#返回utc时间的struc时间对象格式
#time.asctime(time.localtime())
time.mktime(st) #将struct时间对象转成时间戳
time.sleep()#睡几秒
random
random.random()#0到*的随机数,是一个float浮点数
random.randint(1,10))#1 到 10 的一个整数型随机数
random.randrange(1,10,2))#一到十随机(间隔2))
random.uniform(1.1,5.4)# 产生1.1 到 5.4之间的随机浮点数,区间可以不是整数
random.choice(sequence) 从序列中产生一个随机数
random.shuffle(x[, random]) 将一个列表中的元素打乱
random.sample(sequence, k) 从序列中随机获取指定长度的片断
os
os.getcwd()#获取当前工作目录
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') 删除单级空目录,若目录不为空则无法删除
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串
os.system("bash command") 运行shell命令,直接显示
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
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所指向的文件或者目录的最后修改时间
sys
sys.argv #命令行参数List,第一个元素是程序本身路径
sys.exit(n) #退出程序,正常退出时exit(0)
sys.version #获取Python解释程序的版本信息
sys.maxint #最大的Int值
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称
shutil
shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中,可以部分内容
shutil.copyfile(src, dst) 拷贝文件
shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变
shutil.copystat(src, dst) 拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copy(src, dst) 拷贝文件和权限
shutil.copy2(src, dst) 拷贝文件和状态信息
shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的去删除文件
shutil.move(src, dst) 递归的去移动文件(删除文件)
shelve 数据存储方案,对象持久化保存方法,将对象保存到文件里面,缺省的数据存储文件是二进制的。
不具备写回功能,解决的办法就是,第一个是利用一个缓存的变量
在shelve模块中,key必须为字符串,而值可以是python所支持的数据类型。
s = shelve.open('test_shelf.db', flag='w', writeback=True)
xml
。。。
yamal
。。。
configparser
。。。
hashlib 加密算法
"data = hashlib.md5('key123')#md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来
如果没有参数,md5遵守一个规则,生成同一个对应关系,
如果加了参数,就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被撞库,因为别人永远拿不到这个参数"
data = hashlib.sha384()#不同算法,hashlib很多加密算法
data.update(bytes('admin',encoding='utf-8'))#要对哪个字符串进行加密,就放这里
print(data.hexdigest())#拿到加密字符串
re
# '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
# '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
# '$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
# '*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a']
# '+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
# '?' 匹配前一个字符1次或0次
# '{m}' 匹配前一个字符m次
# '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
# '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
# '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
# '\Z' 匹配字符结尾,同$
# '\d' 匹配数字0-9
# '\D' 匹配非数字
# '\w' 匹配[A-Za-z0-9]
# '\W' 匹配非[A-Za-z0-9]
# 's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
re.match(pattern, string, flags=0) 从头开始匹配,如果不是起始位置匹配成功的话,match()就返回none。
re.search(pattern, string, flags=0) 匹配包含
re.sub(pattern, repl, string, count=0, flags=0) 替换字符串中的匹配项。
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.compile(pattern[, flags]) 编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用
re.finditer(pattern, string, flags=0) 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
logging 便捷记录日志且线程安全的模块
。。。
math
ceil:取大于等于x的最小的整数值,如果x是一个整数,则返回x
copysign:把y的正负号加到x前面,可以使用0
cos:求x的余弦,x必须是弧度
degrees:把x从弧度转换成角度
e:表示一个常量
exp:返回math.e,也就是2.71828的x次方
expm1:返回math.e的x(其值为2.71828)次方的值减1
fabs:返回x的绝对值
factorial:取x的阶乘的值
floor:取小于等于x的最大的整数值,如果x是一个整数,则返回自身
fmod:得到x/y的余数,其值是一个浮点数
frexp:返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围
fsum:对迭代器里的每个元素进行求和操作
gcd:返回x和y的最大公约数
hypot:如果x是不是无穷大的数字,则返回True,否则返回False
isfinite:如果x是正无穷大或负无穷大,则返回True,否则返回False
isinf:如果x是正无穷大或负无穷大,则返回True,否则返回False
isnan:如果x不是数字True,否则返回False
ldexp:返回x*(2**i)的值
log:返回x的自然对数,默认以e为基数,base参数给定时,将x的对数返回给定的base,计算式为:log(x)/log(base)
log10:返回x的以10为底的对数
log1p:返回x+1的自然对数(基数为e)的值
log2:返回x的基2对数
modf:返回由x的小数部分和整数部分组成的元组
pi:数字常量,圆周率
pow:返回x的y次方,即x**y
radians:把角度x转换成弧度
sin:求x(x为弧度)的正弦值
sqrt:求x的平方根
tan:返回x(x为弧度)的正切值
trunc:返回x的整数部分
urlib
urllib.quote(string[,safe]) 对字符串进行编码。参数safe指定了不需要编码的字符
urllib.unquote(string) 对字符串进行解码
urllib.quote_plus(string[,safe]) 与urllib.quote类似,但这个方法用‘+‘来替换‘ ‘,而quote用‘%20‘来代替‘ ‘
urllib.unquote_plus(string ) 对字符串进行解码
urllib.urlencode(query[,doseq]) 将dict或者包含两个元素的元组列表转换成url参数。
例如 字典{‘name‘:‘wklken‘,‘pwd‘:‘123‘}将被转换为”name=wklken&pwd=123″
urllib.pathname2url(path) 将本地路径转换成url路径
urllib.url2pathname(path) 将url路径转换成本地路径
urllib.urlretrieve(url[,filename[,reporthook[,data]]]) 下载远程数据到本地
filename:指定保存到本地的路径(若未指定该,urllib生成一个临时文件保存数据)
reporthook:回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调
data:指post到服务器的数据
rulrs = urllib.urlopen(url[,data[,proxies]]) 抓取网页信息,[data]post数据到Url,proxies设置的代理
urlrs.readline() 跟文件对象使用一样
urlrs.readlines() 跟文件对象使用一样
urlrs.fileno() 跟文件对象使用一样
urlrs.close() 跟文件对象使用一样
urlrs.info() 返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
urlrs.getcode() 获取请求返回状态HTTP状态码
urlrs.geturl() 返回请求的URL
getpass 密码
getpass.getpass("请输入密码:") #输入密码不可
getpass.getuser() #显示当前登录系统用户名
注,此模块在pycharm中无法使用。
subprocess 通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。主要用来取代
一些旧的模块方法,如os.system、os.spawn*、os.popen*
subprocess.call(['df','-hT'],shell=False):执行命令,并返回执行状态,其中shell参数为False时,命令需要通过列表的方式传入,当shell为True时,可直接传入命令
subprocess.call("ls -l", shell=True)允许 shell 命令是字符串形式
subprocess.check_call():用法与subprocess.call()类似,区别是,当返回值不为0时,直接抛出异常
subprocess.check_output():用法与上面两个方法类似,区别是,如果当返回值为0时,直接返回输出结果,如果返回值不为0,直接抛出异常。
"subprocess.Popen('mkdir subprocesstest',shell=True,cwd='/root')
args:shell命令,可以是字符串,或者序列类型,如list,tuple。
bufsize:缓冲区大小,可不用关心
stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误
shell:与上面方法中用法相同
cwd:用于设置子进程的当前目录
env:用于指定子进程的环境变量。如果env=None,则默认从父进程继承环境变量
universal_newlines:不同系统的的换行符不同,当该参数设定为true时,则表示使用\n作为换行符"
subprocess.Popen().poll() #检查子进程状态
subprocess.Popen().kill() #终止子进程
subprocess.Popen().send_signal() #向子进程发送信号
subprocess.Popen().terminate() #终止子进程
Json 模块提供了四个功能:dumps、dump、loads、load
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
sort_keys是告诉编码器按照字典排序(a到z)输出。
indent=4 参数根据数据格式缩进显示,读起来更加清晰:
"separators参数的作用是去掉,,:后面的空格,从上面的输出结果都能看到”, :”后面都有个空格,
这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉"
"skipkeys参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,
那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作key的处理."
ensure_ascii=False 输出真正的中文需要指定
encoding:默认是UTF-8,设置json数据的编码方式。
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
python 原始类型向 json 类型的转化对照表:
Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
TRUE TRUE
FALSE FALSE
None null
json 类型转换到 python 的类型对照表
JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
TRUE TRUE
FALSE FALSE
null None
eval()函数就是实现list、dict、tuple与str之间的转化
返回传入字符串的表达式的结果,可将文件中的列表 从str格式原样转成list格式
eval(expression[, globals[, locals]])
expression : 字符串
globals : 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals : 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。
传递globals参数值为{“age”:1822},
eval("{'name':'linux','age':age}",{"age":1822})
输出结果:{‘name’: ‘linux’, ‘age’: 1822}
再加上locals变量
age=18
eval("{'name':'linux','age':age}",{"age":1822},locals())
根据上面两个例子可以看到当locals参数为空,globals参数不为空时,查找globals参数中是否存在变量,并计算。
当两个参数都不为空时,先查找locals参数,再查找globals参数,locals参数中同名变量会覆盖globals中的变量。
# ord() 以1个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值, 多个字符会报错
# hex() 转16进制
# upper() 方法将字符串中的小写字母转为大写字母。
# replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。