常用的基础模块介绍

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))
View Code

模块二: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)))
View Code

模块三: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)))
View Code
 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所指向的文件或者目录的最后修改时间
View Code

模块四:sys  用来提供解释器的相关操作

1 import sys   #用来提供对解释器的相关操作
2 print("返回模块的搜索路径,初始化时使用环境变量的值:",sys.path)
3 print(sys.argv)  #命令行参数list,第一个元素是程序本身路径
View Code
 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)
View Code

模块五: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())
View Code
 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())
View 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)
View Code
 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)
View Code

模块七:正则表达式  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())
View Code

模块八: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"以上是关于常用的基础模块介绍的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化基础day05:Python常用模块学习

Python自动化 第五篇:Python基础-常用模块

Day5 - Python基础5 常用模块学习

常用编程思想与算法

常用python日期日志获取内容循环的代码片段

nodejs常用代码片段