一、time模块 (时间模块)
import time
(1)时间戳 time.time() 单位:秒 可用于计算时间差【同于计时】
print(time.time()) #1545200798.042592 从1970到现在的秒数
(2)结构化时间 time.localtime() 时间结构
print(time.localtime()) #time.struct_time(tm_year=2018, tm_mon=12, tm_mday=19, tm_hour=14, tm_min=30, tm_sec=47, tm_wday=2, tm_yday=353, tm_isdst=0)
类似于:结构体
t=time.localtime() print(t.tm_year) #2018 print(t.tm_mon) #12
(3)将结构化时间转换为时间戳 time.mktime()
print(time.mktime(time.localtime())) #1545201318.0
(4)将结构化时间转换为字符串时间 time.strftime()
print(time.strftime("%Y-%m-%d %X",time.localtime())) #2018-12-19 14:37:02
(5)time.sleep(seconds) 休眠
time.sleep(5) #休眠5秒
二、random模块 (随机模块)
import random
(1)random.random() 提供0-1的随机浮点数
print(random.random()) #0.5572036085768001
(2)random.uniform(n,m) 提供n到m之间的任意浮点数
print(random.uniform(2,9)) #6.404610948366978
(3)random.randint(n,m) 提供n,n+1,n+2,......m这些数中的随机数,包括n和m
print(random.randint(1,9)) #3
(4)random.randrange(n,m) 提供n,n+1,n+2,......m这些数中的随机数,只包括n
print(random.randrange(1,9)) #6
(5)random.choice(可迭代对象) 随机选择可迭代对象中的某一个数
print(random.choice([1,'dhsj',9,'&*'])) #&*
(6)random.sample(可迭代对象,n) 随机选择可迭代对象中的n个数
print(random.sample([1,'dhsj',9,'&*'],3)) #['&*', 1, 'dhsj']
(7)random.shuffle() 打乱次序
a=[1,'dhsj',9,'&*'] random.shuffle(a) print(a) #['&*', 1, 9, 'dhsj']
小例子,随机生成6位数验证码
import random def code(): res='' for i in range(6): num=random.randint(0,9) alf=chr(random.randint(65,122)) s=str(random.choice([num,alf])) res=res+s return res print(code()) #X491hV
三、os模块
import os
__file__ 表示该文件的位置
print(__file__) #E:/000博客文章的代码/00test/博客.py
注:其实__file__代表的是 博客.py,前面的是pycharm自己加的
(1)os.path.diirname(path) 获取当前文件的上一级目录
print(os.path.dirname(__file__)) #E:/000博客文章的代码/00test
(2)os.path.abspath(文件名,后缀) 获取该文件的绝对路径
print(os.path.abspath('test.py')) #E:\000博客文章的代码\00test\test.py
(3)os.getcwd() 获取当前目录,即当前脚本工作的目录路径
print(os.getcwd()) #E:\000博客文章的代码\00test
(4)os.curdir 返回当前目录 os.pardir 获取当前目录的父目录字符串名
print(os.curdir) #结果显示 . print(os.pardir) #结果显示 ..
(5)os.listdir('dirname') 列出指定目录下的所有文件和子目录,包含隐藏文件,并以列表方式打印
print(os.listdir('D:/')) #结果显示 ['$RECYCLE.BIN', 'adobe', 'Anaconda3-4.2.0-Windows-x86_64.exe', 'ARC', 'arcgis route', 'arcgis破解版', 'C#2012 route', 'CAJViewer', 'ENDNOTEx7', 'ENDNOTEx7.rar', 'ENVI route', 'ENVI5.3 SP1', 'Favorites', 'googleupdatesetup-2-.exe', 'graphviz-2.38.msi', 'libsvm-3.22', 'MATLAB route', 'Matlab2016', 'Mozilla Firefox', 'MySQL5.6.40安装包', 'office 2016', 'office 2016 route', 'Office Visio 2013', 'Office Visio 2013 route', 'office2016注册机.zip', 'PDF', 'PDF route', 'platform-tools_r28.0.1-windows', 'platform-tools_r28.0.1-windows.zip', 'PlotPlayer route', 'PotPlayerSetup_1.7.12845.0_XiaZaiBa.zip', 'Pycharm安装包', 'Pychram', 'QQ', 'QQ浏览器', 'R', 'R-3.4.4-win.exe', 'RStudio-1.1.442.exe', 'SunloginClient9.8.exe', 'System Volume Information', 'tesseract-ocr-setup-3.05.01.exe', 'VS2012_ULT_chs', 'VS2013_RTMULT_CHS', '冰点文库下载.rar', '微信', '搜狗输入法', '百度云盘', '谷歌地球 Google Earth.exe', '谷歌浏览器']
(6)os.reomve() 删除一个文件
(7)os.stat('path/filename') 获取文件目录信息
(8)os.path.dirname(path) 返回path的目录 os.path.basename(path) 返回path最后的文件名
route='E:/000博客文章的代码/00test/博客.py' print(os.path.dirname(route)) #E:/000博客文章的代码/00test print(os.path.basename(route)) #博客.py
(9)os.path.exists(path) 如果path存在,返回True,否则返回false 【用的较多!!!!】
(10)os.path.join(path1 [path2 [path3,......]]) 将多个路径组合返回,第一个绝对路径之前参数将被忽略
path1=r'E:\讲课学习' path2=r'自学文档\test.py' print(os.path.join(path1,path2)) #E:\讲课学习\自学文档\test.py
四、sys模块
import sys
(1)sys.path 返回模块的搜索路径
(2)sys.argv 命令行参数list,第一参数是程序本身的路径
(3)进度条的显示 sys.stdout.write('#') 百分比怎么加?------>分子/分母
#效果就是:每隔1秒中就显示一个#
import sys import time for i in range(10): sys.stdout.write('#') time.sleep(1) sys.stdout.flush() #刷新
结果显示:########## 【每隔1秒钟显示一个#】
五、json和pickle模块
import json / import pickle
补充:eval内置方法,可以将一个字符串转换成python对象
(1)json.dumps(输入) 将 输入 转换成字符串,要求是“ ” 【因为json只认识“ ”】(双引号有用,单引号没用!!!)
import json dic={"name":"psy"} data=json.dumps(dic) print(data) #{"name": "psy"} print(type(data)) #<class 'str'>
单引号/双引号的问题
import json s='hello' data=json.dumps(s) print(data) #"hello" print(type(data)) #<class 'str'>
(2)json.loads() 将json格式的数据数据转换为字符串----->【爬虫中常用!!】
(3)pickle模块和json模块使用方法一模一样,通常都是使用json模块
注唯一差别:pickle.dumps(输入) 将 输入 转换成‘bytes’字节
六、shelve模块 XML模块
注:json pickle shelve XML都是用于数据交换,但是最常用的还是json模块
七、re模块 (模糊匹配)【元字符+6各函数】
import re
元字符:
(1). 什么都可以匹配,除了\n,每次匹配一个
res=re.findall('p..y','wbdadhkjpasyk') print(res) #['pasy']
(2)^ 在字符开头匹配
res=re.findall('^p..y','wbdadhkjpasyk') print(res) #[]
(3)$ 在字符串末尾匹配
res=re.findall('p..y$','wbdadhkjpasy') print(res) #['pasy']
(4)* 匹配0-无穷次的内容 (5) + 匹配1-无穷次的内容 (6) ? 匹配0,1次内容 (7) .*? 最小匹配
res1=re.findall('psy*','wpsnpsypsy') print(res1) #['ps', 'psy', 'psy'] res2=re.findall('d*','wdnddsddd') print(res2) #['', 'd', '', 'dd', '', 'ddd', '']
---间隔线
res1=re.findall('psy+','wpsnpsypsy') print(res1) #['psy', 'psy'] res2=re.findall('d+','wdnddsddd') print(res2) #['d', 'dd', 'ddd']
---间隔线
res1=re.findall('psy?','wpsnpsypsy') print(res1) #['ps', 'psy', 'psy'] res2=re.findall('d?','wdnddsddd') print(res2) #['', 'd', '', 'd', 'd', '', 'd', 'd', 'd', '']
(8)[] 字符集,对单个字符给出取值范围
res1=re.findall('k[ab]','acndkabk') print(res1) #['ka'] res2=re.findall('k[a-z]','akvndkabk') print(res2) #['kv', 'ka'] res3=re.findall('k[^az]','akvndkabk') print(res3) #['kv']
(9){} 比如{m}指 扩展前一个字符m次 {m,n}扩展前一个字符m至n次,包括n次
res1=re.findall('ab{2}','abwoabbniabbbbb') print(res1) #['abb', 'abb']
(10)\d 数字[0-9]
(11)\w 单词字符[A-Za-z0-9]
注:(10)和(11)常用 其中\是转义字符
res1=re.findall(r'e\\l','pase\l') print(res1) #['e\\l']
函数:
例: re.findall(pattern,string,flags=0) 别的方法传入参数也相同
其中:pattern正则表达式的字符串或原生字符串表示 string待匹配字符串 flags正则表达式使用时的控制标记
(1)re.findall() 返回所有满足匹配条件的结果,放在列表中
res=re.findall('p','pansy_pay_whp') print(res) #['p', 'p', 'p']
(2)re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象,利用group()提取值
res=re.search('p','pansy_pay_whp') print(res) #<_sre.SRE_Match object; span=(0, 1), match='p'> print(res.group()) #p
(3)re.match() 在一个字符串的起始位置起匹配正则表达式,返回match对象
res=re.match('p','pansy_pay_whp') print(res) #<_sre.SRE_Match object; span=(0, 1), match='p'> print(res.group()) #p
(4)re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
res=re.split('p','pansy_pay_whp') print(res) #['', 'ansy_', 'ay_wh', '']
(5)re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
res=re.sub('p','k','pansy_pay_whp') print(res) #kansy_kay_whk
(6)re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
res=re.finditer('p','pansy_pay_whp') print(res) #<callable_iterator object at 0x0000018AFC41E080> print(next(res).group()) #p print(next(res).group()) #p print(next(res).group()) #p print(next(res).group()) #超出边界,报错:StopIteration
(7)re.compile()
注:(1)-(6)是用来处理字符串的。compile()方法可以将正则字符串编译成正则表达式对象,以便在后面的匹配中重复使用。
content1='2018-1-20 23:12' content2='2018-5-20 00:00' content3='2018-12-2 13:14' pattern=re.compile('\d{2}:\d{2}') res1=re.sub(pattern,'',content1) res2=re.sub(pattern,'',content2) res3=re.sub(pattern,'',content3) print(res1,res2,res3) #2018-1-20 2018-5-20 2018-12-2
PS:别的模块就不加多说了,比如:configparse模块;logging模块;hashlib模块..