常用的基础模块介绍
Posted Eric9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用的基础模块介绍相关的知识,希望对你有一定的参考价值。
模块,是用一堆代码来实现某个功能的代码集合
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码来调用该功能,提供了代码的重用性和代码间的耦合性
而对于一个复杂的功能,可能需要多个函数才能完成,这些文件组成的代码集合称为模块
模块分为三种:自定义模块;内置标准模块;开源模块
模块一:datetime和time
1 import time 2 print("返回标准时间(含年月日等信息):",time.asctime()) 3 print("返回本地时间的struct time时间格式:",time.localtime()) 4 print("返回utc的struct时间对象格式:",time.gmtime(time.time()-800000)) 5 print("返回标准时间格式:",time.asctime(time.localtime())) 6 print("返回标准时间格式:",time.ctime()) 7 # # 8 # # #将日期字符串转换成时间戳 9 string2_struct=time.strptime("2016/10/22","%Y/%m/%d") 10 print("将日期字符串转换成struct格式:",string2_struct) 11 # # 12 struct_2_stamp=time.mktime(string2_struct) 13 print("将struct转换成时间戳:",struct_2_stamp) 14 # # 15 # # #将时间戳转换为字符串 16 print(time.gmtime(time.time()-86640)) #将utc时间戳转换成structtime格式 17 print(time.altzone) 18 # # 19 # # #将utc struct_time 格式转成指定的字符串格式 格式化时间格式 20 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())) 21 # # 22 # # 23 # # #datetime 24 import datetime 25 print("返回系统当前时间:",datetime.datetime.now()) 26 print("标准格式;",datetime.datetime.fromtimestamp(time.time())) 27 # # #时间加减 28 print("当前时间加三天:",datetime.datetime.now()+datetime.timedelta(3)) 29 print("当前时间减三天:",datetime.datetime.now()+datetime.timedelta(-3)) 30 print("当前时间加三小时:",datetime.datetime.now()+datetime.timedelta(hours=3)) 31 print("当前时间加30分钟:",datetime.datetime.now()+datetime.timedelta(minutes=30)) 32 # # 33 # # #时间替换,即对现有时间的修改 34 c_time=datetime.datetime.now() 35 print(c_time.replace(minute=3,hour=2))
模块二:random 随机数
1 import random 2 print(random.randint(1,2)) 3 print(random.randrange(1,3)) 4 # # 5 # # #生成随机验证码 6 checkcode="" 7 for i in range(4): 8 current=random.randrange(0,4) 9 if current!=i: 10 temp=chr(random.randint(65,90)) 11 else: 12 temp=random.randint(0,9) 13 checkcode+=str(temp) 14 print("验证码为:",checkcode) 15 # # 16 # # # print("生成65-90之间的随机数:",random.randint(65,90)) 17 # # # print("根据ASCII码转换:",chr(random.randint(65,90)))
模块三:os模块:用于提供系统级别的操作
1 import random 2 print(random.randint(1,2)) 3 print(random.randrange(1,3)) 4 # # 5 # # #生成随机验证码 6 checkcode="" 7 for i in range(4): 8 current=random.randrange(0,4) 9 if current!=i: 10 temp=chr(random.randint(65,90)) 11 else: 12 temp=random.randint(0,9) 13 checkcode+=str(temp) 14 print("验证码为:",checkcode) 15 # # 16 # # # print("生成65-90之间的随机数:",random.randint(65,90)) 17 # # # print("根据ASCII码转换:",chr(random.randint(65,90)))
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: (\'.\') 4 os.pardir 获取当前目录的父目录字符串名:(\'..\') 5 os.makedirs(\'dir1/dir2\') 可生成多层递归目录 6 os.removedirs(\'dirname1\') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir(\'dirname\') 生成单级目录;相当于shell中mkdir dirname 8 os.rmdir(\'dirname\') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir(\'dirname\') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","new") 重命名文件/目录 12 os.stat(\'path/filename\') 获取文件/目录信息 13 os.sep 操作系统特定的路径分隔符,win下为"\\\\",Linux下为"/" 14 os.linesep 当前平台使用的行终止符,win下为"\\t\\n",Linux下为"\\n" 15 os.pathsep 用于分割文件路径的字符串 16 os.name 字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\' 17 os.system("bash command") 运行shell命令,直接显示 18 os.environ 获取系统环境变量 19 os.path.abspath(path) 返回path规范化的绝对路径 20 os.path.split(path) 将path分割成目录和文件名二元组返回 21 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 23 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 24 os.path.isabs(path) 如果path是绝对路径,返回True 25 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 26 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 27 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 29 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
模块四:sys 用来提供解释器的相关操作
1 import sys #用来提供对解释器的相关操作 2 print("返回模块的搜索路径,初始化时使用环境变量的值:",sys.path) 3 print(sys.argv) #命令行参数list,第一个元素是程序本身路径
1 import sys 2 import time 3 4 5 def view_bar(num, total): 6 rate = float(num) / float(total) 7 rate_num = int(rate * 100) 8 r = \'\\r%d%%\' % (rate_num, ) 9 sys.stdout.write(r) 10 sys.stdout.flush() 11 12 13 if __name__ == \'__main__\': 14 for i in range(0, 100): 15 time.sleep(0.1) 16 view_bar(i, 100)
模块五:hashlib 用于加密相关的 操作,提供了MD5和Sha模块,主要提供SHA1/SHA224/SHA256/SHA384/SHA512/MD5算法
1 import hashlib 2 m=hashlib.md5() 3 m.update(b"Hello") 4 print("二进制格式加密:",m.digest()) 5 print("十六进制加密:",m.hexdigest(),len(m.hexdigest())) 6 7 #sha1 8 s1=hashlib.sha1() 9 s1.update(b"Hello world") 10 print("SHA1:",s1.hexdigest(),len(s1.hexdigest())) 11 12 s2=hashlib.sha224() 13 s2.update(b"Hello world") 14 print("SHA224:",s2.hexdigest(),len(s2.hexdigest())) 15 16 s3=hashlib.sha256() 17 s3.update(b"Hello world") 18 print("SHA256:",s3.hexdigest(),len(s3.hexdigest())) 19 20 s4=hashlib.sha384() 21 s4.update(b"Hello world") 22 print("SHA384:",s4.hexdigest(),len(s4.hexdigest())) 23 24 s5=hashlib.sha512() 25 s5.update(b"Hello world") 26 print("SHA512:",s5.hexdigest(),len(s5.hexdigest())) 27 # # #由上述例子可以看出,不同的加密算法位数是不一样的,随着指数的增大,加密位数越来越多 28 # # #但是上述方法的加密可以通过撞库来反解,可以通过对加密算法添加自定义key来加密 29 m2=hashlib.md5(b"8jindeod098") 30 m2.update(b"Hello") 31 print("自定义参数加密:",m2.hexdigest()) 32 # # 33 # # #更加牛逼的加密方式 内部对我们创建key和内容再进行处理后然后再加密 34 import hmac 35 h=hmac.new(b"Eric") 36 h.update(b"Hello world") 37 print("HMac:",h.hexdigest())
1 #生成随机验证码的函数 2 def code(): 3 _code = list() 4 for i in range(4): 5 ra = random.randrange(4) 6 if i == ra: 7 _code.append(chr(random.randrange(97, 122))) 8 else: 9 _code.append(str(i)) 10 result = \'\'.join(_code) 11 return result 12 print("123:",code())
模块六:pickle,json
1 import pickle,json 2 data={"k1":123,"k2":"Hello"} 3 # # #pickle.dumps将数据通过特殊的形式转换为只有python语言认识的字符串 4 p_str=pickle.dumps(data) 5 print(p_str) 6 ss=pickle.loads(p_str) 7 print("111",ss) 8 # # 9 # # #pickle.dump将数据通过特殊形式转换为只有python认识的字符串,并写入文件 10 with open("result.pk","w") as f: 11 pickle.dump(data,f) 12 # # 13 import json 14 # # #json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串 15 j_str=json.dumps(data) 16 print(j_str) 17 # # 18 # # #json.dump将数据通过特殊形式转换为只有python认识的字符串,并写入文件 19 with open("result.json","w") as fp: 20 json.dump(data,fp)
1 import json,pickle 2 #json 用于【字符串】和【python】基本数据类型之间的转换 3 #pickle 用于【python特有的类型】和【python基本数据类型之间的转换】 4 data={"k1":123,"k2":"Hello"} 5 p_str=pickle.dumps(data) 6 print("pickle.dumps:",type(p_str),p_str) #转换为字节类型 7 #dump将数据通过特殊的形势转换为只有python语言认识的字符串,并写入文件 8 with open("dump.pk","wb") as fp: 9 pickle.dump(data,fp) 10 11 #json.dumps将数据通过特殊的形式转换为所有语言都认识的字符 12 j_str=json.dumps(data) 13 print("json.dumps:",j_str,type(j_str)) #转换为字符串类型 14 15 #json.dump将数据通过特殊的形式转换为所有语言都认识的字符,并写入文件 16 with open("json.pk","w") as fj: #字符串可以直接写入 17 json.dump(data,fj)
模块七:正则表达式 re
1 import re 2 # # #正则表达式相关操作 3 print() 4 print("--------------------分隔符----------------------") 5 origin = "hel1lo al2ex b1cd ab3cd lge acd 19" 6 r=re.match("\\w+",origin) #从头开始匹配,匹配成功返回一个对象,不成功返回NONE 7 print("获取匹配的所有结果:",r.group()) 8 #分组:提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来) 9 print("获取匹配的分组结果:",r.groups()) 10 11 #浏览整个字符串去匹配第一个,未匹配成功返回None 12 r=re.search("\\d+",origin) 13 print("浏览整个字符串,匹配第一个:",r.group()) 14 #获取非重复的匹配列表,如果有一组则用列表形式返回 15 r=re.findall("\\d+",origin) 16 print(r) 17 #替换匹配成功指定位置的字符串 18 r=re.sub("\\d+","8888",origin,1) 19 print("替换匹配成功指定位置的字符串:",r) 20 21 #split 根据正则匹配分割字符串 22 r=re.split("\\d+",origin) 23 print("split:",r) 24 25 origin1 = "hello alex bcd alex lge alex acd 19" 26 r1 = re.split("(alex)", origin1, 1) 27 print("用alex来拆分,但是保留Alex:",r1) 28 r2 = re.split("(al(ex))", origin1, 1) 29 print("用alex或ex来拆分,但是均保留:",r2) 30 31 #匹配IP地址 32 str_ip="Hello,222.168.16.60,Welcome,13783417293,172560199@sina.com" 33 m=re.search("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)",str_ip) 34 print("匹配到的IP是:",m.group()) 35 m1=re.search("(1)([358]\\d{9})",str_ip) 36 print("匹配到的电话为:",m1.group()) 37 m2=re.search("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+",str_ip) 38 print("匹配到的邮箱是:",m2.group())
模块八:configparser用于处理特定格式的文件,其本质是利用open来操作文件
1 import configparser 2 config=configparser.ConfigParser() 3 config.read("Hello world",encoding="utf-8") 4 ret=config.sections() 5 print("获取所有的节点:",ret) 6 7 #获取指定节点下的键值对 8 ret1=config.items("sections1") 9 print("获取sections1下的键值对:",ret1) 10 #获取制定节点下的所有键 11 ret2=config.options("sections1") 12 print(ret2) 13 #获取指定节点下指定key值 14 v=config.get("section1","k1") 15 print(v) 16 17 # 检查、删除、添加节点 18 has_sec=config.has_section("section1") 19 print("是否存在节点:",has_sec) 20 21 #添加节点 22 config.add_section("sect1"以上是关于常用的基础模块介绍的主要内容,如果未能解决你的问题,请参考以下文章