1.time模块
1 import time 2 #时间戳 3 print(time.time()) 4 #时间结构 5 print(time.localtime())#本地时间 6 print(time.gmtime())#世界时间 7 #字符串时间 8 print(time.asctime()) 9 # 直接显示字符串时间 10 import datetime 11 print(datetime.datetime.now()) 12 #结构时间转化为自定义字符串时间 13 print(time.strftime("%Y-%m-%d %X",time.localtime())) 14 #字符串时间转化为结构时间 15 print(time.strptime("2019-12-12 15:15:15","%Y-%m-%d %X")) 16 #结构时间转化为时间戳 17 print(time.mktime(time.localtime())) 18 结果: 19 时间戳:1544097660.9399388 20 时间结构:本地——>time.struct_time(tm_year=2018, tm_mon=12, tm_mday=6, tm_hour=20, tm_min=1, tm_sec=0, tm_wday=3, tm_yday=340, tm_isdst=0) 21 世界时间——>time.struct_time(tm_year=2018, tm_mon=12, tm_mday=6, tm_hour=12, tm_min=1, tm_sec=0, tm_wday=3, tm_yday=340, tm_isdst=0) 22 字符串时间:Thu Dec 6 20:01:00 2018 23 直接显示字符串时间:2018-12-06 20:01:00.941933 24 结构时间转化为自定义字符串时间:2018-12-06 20:01:00 25 字符串时间转化为结构时间:time.struct_time(tm_year=2019, tm_mon=12, tm_mday=12, tm_hour=15, tm_min=15, tm_sec=15, tm_wday=3, tm_yday=346, tm_isdst=-1) 26 结构时间转化为时间戳:1544097660.0
2.random模块
1 import random 2 #(0,1)随机浮点数 3 res = random.random() 4 print(res) 5 #[1,2]指定范围的随机浮点数 6 res = random.uniform(1,2) 7 print(res) 8 #[1,2]随机整形 9 res = random.randint(1,2) 10 print(res) 11 #[1,2)随机整形 12 res = random.randrange(1,2) 13 print(res) 14 #列表中的元素随机取一个值 15 res = random.choice([11,22,33,44,55]) 16 print(res) 17 #列表中的元素随机取几个值 18 res = random.sample([11,22,33,44,55],3) 19 print(res)
3.os模块
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多层递归目录 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","newname") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" 14 os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " 15 os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: 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所指向的文件或者目录的最后修改时间
4.sys模块
1 import time 2 import sys 3 # sys.argv 在python解释器上执行py文件时直接输入参数可以用列表方式取值 4 5 for i in range(0,10): 6 sys.stdout.write("#")#不是直接显示,先放在缓存,放完之后显示 7 time.sleep(0.1) 8 sys.stdout.flush()#刷新缓存 9 print(sys.exit(1))#返回0时表示文件正常结
5.json模块
1 import json 2 dic = {"name":"ailadi"} 3 f = open("new.txt","w") 4 dic=json.dumps(dic) 5 f.write(dic) #将数据转化为字符串模式——————> s = json.dump(dic,f) 只适用于文件 6 7 f = open("new.txt","r") 8 s = f.read() 9 s = json.loads(s) #将读出的数据提取格式 ————> s = json.load(f) 只适用于文件 10 print(type(s))
6.pickle模块
1 """以字节的方式读写,支持类和函数""" 2 dic = {"name":"ailadi"} 3 import pickle 4 with open("new_pickle","wb") as f: 5 dic = pickle.dumps(dic) 6 f.write(dic) #------->pickle.dump(dic,f) 7 with open("new_pickle","rb") as f: 8 s = f.read() 9 print(s) 10 s = pickle.loads(s) #----->s = pickle.load(f) 11 print(s)
7.shelve模块
1 """存取字典""" 2 import shelve 3 f = shelve.open(r"shelve.txt") 4 5 #存 6 # f["name"] = "ailadi" 7 # f.close() 8 9 #取 10 # print(f["name"]) 11 # f.close()
8.XML模块
1 """ 2 XML 3 teg:对象 4 attrib:属性 5 text:内容 6 """ 7 #遍历 8 import xml.etree.ElementTree as ET 9 tree = ET.parse("xml_text") 10 root = tree.getroot() 11 for i in root: 12 print(i.tag) #查看根节点的对象 13 print(i.attrib) #查看根节点的对象属性 14 print(i.text) #查看根节点的对象内容 15 for j in i: 16 print(j.tag) #查看对象中的对象 17 print(j.attrib) #查看属性 18 print(j.text) #查看内容 19 20 21 #只遍历yesr节点 22 import xml.etree.ElementTree as ET 23 tree = ET.parse("xml_text") 24 root = tree.getroot() 25 for i in root.iter("year"): 26 print(i.attrib,i.text) 27 28 #修改 29 import xml.etree.ElementTree as ET 30 tree = ET.parse("xml_text") 31 root = tree.getroot() 32 for i in root.iter("year"): #在内存中修改 33 i.text = "2018" 34 i.attrib = {"updated":"no"} 35 tree.write("xml_text") #写入硬盘 36 37 #删除 38 import xml.etree.ElementTree as ET 39 tree = ET.parse("xml_text") 40 root = tree.getroot() 41 for country in root.findall("country"): 42 ret = int(country.find('year').text) 43 print(ret) 44 if ret == 2019: 45 root.remove(country) 46 tree.write("xxxxxxxxxxxxxxxxxx") 47 48 49 50 import xml.etree.ElementTree as ET 51 52 new_xml = ET.Element("namelist") #创建根节点 53 54 name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) #在根节点下创建子节点 55 age = ET.SubElement(name, "age", attrib={"checked": "no"}) #在子节点下创建 56 sex = ET.SubElement(name, "sex") 57 age.text = "18" #进行文本赋值 58 sex.text = '33' 59 name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"}) 60 age = ET.SubElement(name2, "age") 61 age.text = '19' 62 63 et = ET.ElementTree(new_xml) # 生成文档对象 64 et.write("test.xml", encoding="utf-8", xml_declaration=True) 65 66 ET.dump(new_xml) # 打印生成的格式
9.re模块
元字符之. ^ $ * + ? { }
. ^ $ * + ? { }
元字符之字符集[]:
1 ret=re.findall('a[bc]d','acd') 2 print(ret)#['acd'] 3 4 ret=re.findall('[a-z]','acd') 5 print(ret)#['a', 'c', 'd'] 6 7 ret=re.findall('[.*+]','a.cd+') 8 print(ret)#['.', '+'] 9 10 #在字符集里有功能的符号: - ^ 11 12 ret=re.findall('[1-9]','45dha3') 13 print(ret)#['4', '5', '3'] 14 15 ret=re.findall('[^ab]','45bdha3') 16 print(ret)#['4', '5', 'd', 'h', '3'] 17 18 ret=re.findall('[d]','45bdha3') 19 print(ret)#['4', '5', '3']
元字符之转义符
反斜杠后边跟元字符去除特殊功能,比如.
反斜杠后边跟普通字符实现特殊功能,比如d
d 匹配任何十进制数;它相当于类 [0-9]。
D 匹配任何非数字字符;它相当于类 [^0-9]。
s 匹配任何空白字符;它相当于类 [
fv]。
S 匹配任何非空白字符;它相当于类 [^
fv]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格 ,&,#等
元字符之分组()
1 m = re.findall(r'(ad)+', 'add') 2 print(m) 3 4 ret=re.search('(?P<id>d{2})/(?P<name>w{3})','23/com') 5 print(ret.group())#23/com 6 print(ret.group('id'))#23
元字符之|
1 #或(|) 2 ret=re.search('(ab)|d','rabhdg8sd') 3 print(ret.group())#ab
1 ret = re.findall(r"(ab)|(cd)","abcdxxxabxxxcd") 2 print(ret) #[('ab', ''), ('', 'cd'), ('ab', ''), ('', 'cd')] 3 ret = re.findall(r"(ab)|cd","abcdxxxabxxxcd") 4 print(ret) #['ab', '', 'ab', ''] 5 ret = re.findall(r"ab|(cd)","abcdxxxabxxxcd") 6 print(ret) #['', 'cd', '', 'cd'] 7 ret = re.findall(r"ab|cd","abcdxxxabxxxcd") 8 print(ret) #['ab', 'cd', 'ab', 'cd'] 9 ret = re.findall(r"(ab|cd)","abcdxxxabxxxcd") 10 print(ret) #['ab', 'cd', 'ab', 'cd']
re模块下的常用方法
1 import re 2 #1 3 re.findall('a','alvin yuan') #返回所有满足匹配条件的结果,放在列表里 4 #2 5 re.search('a','alvin yuan').group() #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以 6 # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。 7 8 #3 9 re.match('a','abc').group() #同search,不过尽在字符串开始处进行匹配 10 11 #4 12 ret=re.split('[ab]','abcd') #先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割 13 print(ret)#['', '', 'cd'] 14 15 #5 16 ret=re.sub('d','abc','alvin5yuan6',1) 17 print(ret)#alvinabcyuan6 18 ret=re.subn('d','abc','alvin5yuan6') 19 print(ret)#('alvinabcyuanabc', 2) 20 21 #6 22 obj=re.compile('d{3}') 23 ret=obj.search('abc123eeee') 24 print(ret.group())#123
1 import re 2 3 ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com') 4 print(ret) #['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 5 6 ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com') # ?: 取消权限符号 7 print(ret) #['www.oldboy.com']
1 import re 2 3 print(re.findall("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>")) 4 #运行结果['h1'] 5 print(re.search("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>").group('tag_name')) 6 #运行结果<re.Match object; span=(0, 14), match='<h1>hello</h1>'> 7 print(re.search("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>").group('tag_name')) 8 #运行结果h1 9 print(re.search(r"<(w+)>w+</1>","<h1>hello</h1>")) 10 #运行结果<re.Match object; span=(0, 14), match='<h1>hello</h1>'>
10.logging模块
1 """定义一个logger函数""" 2 def logger(): 3 import logging 4 logger = logging.getLogger() #添加根 5 6 fh = logging.FileHandler("message.txt") #添加日志文件路径 7 8 fm = logging.Formatter('%(asctime)s %(name)s %(message)s [%(lineno)d]') #输出日志的格式和内容 9 10 #添加信息 11 fh.setFormatter(fm) 12 logger.addHandler(fh) 13 #设置日志输出的等级 14 logger.setLevel(logging.DEBUG) 15 return logger 16 17 #调用logger函数 18 logger = logger() 19 20 #添加日志输出的内容 21 logger.debug('bebug massage') 22 logger.info('info massage') 23 logger.warning('warning massage') 24 logger.error('error massage') 25 logger.critical('bebug massage')
11.configparse模块
1 import configparser 2 config = configparser.ConfigParser() 3 config["DEFAULT"] = {'ServerAliveInterval': '45', 4 'Compression': 'yes', 5 'CompressionLevel': '9'} 6 config['bitbucket.org'] = {} 7 config['bitbucket.org']['User'] = 'hg' 8 config['topsecret.server.com'] = {} 9 topsecret = config['topsecret.server.com'] 10 topsecret['Host Port'] = '50022' # mutates the parser 11 topsecret['ForwardX11'] = 'no' # same here 12 config['DEFAULT']['ForwardX11'] = 'yes' 13 with open('example.ini', 'w') as configfile: 14 config.write(configfile) #写入文件
12.hashlib模块
1 import hashlib 2 3 s = hashlib.md5("alvin".encode('utf8')) #加盐值 4 s.update("hello".encode('utf8')) #加密 5 print(s.hexdigest()) 6 7 import hmac 8 9 h = hmac.new('alvin'.encode('utf8')) 10 h.update('hello'.encode('utf8')) 11 print(h.hexdigest())