1、模块:
(1)定义:在python里,将一个.py文件称之为一个模块(Module)
(2)模块的好处:
- 大大提高了代码的可维护性
- 可以被其他模块引用,提高效率
- 避免函数名和变量名重复报错
(3)模块的分类: - python标准库(例如import time)
- 第三方模块(第三方插件等)
- 应用程序自定义模块(自己写的)
2、__name__的两个用法
(1)被调用模块的自我测试
if __name__=="__main__":
print("test测试本模块功能")
(2)禁止别的模块调用该模块,防止其他冲突
if __name__=="__main__":
main.run()
(3)放在被调用函数里执行,结果为main;放在调用函数里执行,结果是其文件路径名
3、时间模块的使用
(1)strftime(format[,t])——把一个代表时间的元组或者struct_time(由time.localtime()和time.gmtime()转化为格式化的时间字符串,如果t未指定,将传入time.localtime().)
import time
print(time.strftime("%Y-%m-%d %X",time.localtime()))
#输出结果:
2020-01-26 16:58:19
(2)strptime(string[,format])——把一个格式化字符串转化为struct_time,实际上和strftime()是逆操作
import time
print(time.strptime("2020-01-26 17:01:21","%Y-%m-%d %X"))
#输出结果:
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26, tm_hour=17, tm_min=1, tm_sec=21, tm_wday=6, tm_yday=26, tm_isdst=-1)
(3)datetime
import datetime
print(datetime.datetime.now())
#输出结果:
2020-01-26 17:18:44.951699
4、随机模块(random)
(1)random
import random
ret=random.random()
print(ret)
#输出结果:
0.3696590055819927
(2)print(randint(1,3))———1,2,3,整数的闭区间[1,3]
(3)print(randrange(1,3))———1,2,整数的半开半闭区间[1,3)
(4)print(choice([1,2,3]))——随机选取列表中的一个值
(5)print(sample([1,2,3],2))——随机选取列表中的两个值
(6)print(uniform(1,3))——选任意类型的浮点型2.408009332454876
(7)shuffle——将列表顺序打乱随机输出
import random
item=[1,2,3,4,5]
random.shuffle(item)
print(item)
#输出结果:
[1, 3, 5, 2, 4]
5、随机验证码实例
import random
def code():
ret=""
for i in range(5):
num=random.randint(0,9)
alf=chr(random.randint(65,122))
s=str(random.choice([num,alf]))
ret+=s
return ret
print(code())
#输出结果:
数字+字母的随机五位(不知道为啥有特殊字符)
6、BASE_DIR
使用BASE_DIR可以取到绝对路径、相对路径,使用方法如下:
打印__file__可以查看当前文件路径
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
7、os模块
(1)定义:os模块是与操作系统交互的一个接口
(2)os模块方法(很多用法和Linux相似)
- os.getcwd()——获取当前python脚本的目录路径
- os.chdir(“dirname”)——改变当前脚本目录;相当于shell下cd
- os.curdir(".")——返回当前目录
- os.pardir("…")——获取当前目录的父母了字符串名
- os.makedirs(“dirname1/dirname2”)——可生成多层递归目录
- os.removedirs()——若目录为空,则删除,并递归到上一级目录,若也为空,则删除,以此类推
- os.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——分割文件路径的字符串,win下为";",Linux下为":"
- os.system(“bash command”)——运行shell命令,直接显示
- os.environ——获取系统环境变量
- os.path.abspath(path)——获取path规范化的绝对路径
- os.path.split(path)——将path分成目录和文件名二元组返回
import os
print(os.path.split("/Users/baijie/PycharmProjects/Test/venv/bin/python /Users/baijie/PycharmProjects/Test/venv/hhh/1.py"))
#输出结果:
('/Users/baijie/PycharmProjects/Test/venv/bin/python /Users/baijie/PycharmProjects/Test/venv/hhh', '1.py')
- os.path.dirname(path)——返回path目录,上面输出结果中元组的第一个元素
- os.path.basename(path)——返回文件名,上面元组中第二个元素
- os.path.exists(path)——判断路径是否存在,返回结果为True或者False
- os.path.isabs(path)——判断是否是绝对路径
- os.path.isfile(path)——判断是否是存在的文件
- os.path.isdir(path)——判断是否是存在的目录
- os.path.join(path1[,path2[,…]])——将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
- os.path.getatime(path)——返回path文件或者目录的最后存取时间
- os.path.getmtime(path)——返回path文件或者目录的最后修改时间
8、sys模块
(1)进度条实例
import time
import sys
for i in range(100):
sys.stdout.write("#")
time.sleep(0.1)
sys.stdout.flush()
(2)sys.path——查看当前目录
(3)sys.version——获取当前解释器的版本
9、json模块
(1)json主要用于处理数据
(2)json.dumps()——将所有的数据类型转换成json字符串格式
**说明:**原理就是将单引变双引,没有引号直接加双引
(3)json.loads()——还原成原来的数据类型
说明: loads不必须在dumps使用后才可以,只要是符合json格式规则,即都是双引号就可以使用
10、pickle模块
pickle模块和json模块方法相同,只是表现形式不同,json是转换为字符串,pickle转换成字节。
11、序列化
定义:我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化的内容写入磁盘,或者通过网络传输到别的机器上。反之,把变量内容从序列化的对象重新读到内存里称之为反序列化。
12、XML模块
xml是实现 不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更加简单,至今还有很多传统公司如金融行业的很多系统的接口还是xml,xml是通过<>节点数据结构的。
13、re模块
(1)就其本质而言,正则表达式(re)是一种小型的、高度专业化的编码语言,它内嵌在python中,并通过re模块实现,正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行。
(2)正则表达式用处:用于模糊匹配
(3)小实例:找出字符串中的数字(假如姓名年龄写一起了)
import re
s="alex22kangkang34bcde45"
s1=re.findall("\d+",s)
print(s1)
#输出结果:
['22', '34', '45']
(4)正则表达式说明(所有的正则都是针对其前面一个字符说的)
- 普通字符:大多数字符和字母都会和自身相匹配
import re
ls=re.findall("abcde","abcdeoo0pdfd")
print(ls)
#输出结果:
['abcde']
说明:
前面是要查找的字符,后面是全部字符串,如果查找的字符串不存在,输出[]
- 元字符:. ^ $ * + ? {} [] | ()
1).是通配符 ,一个.代表一个字符
import re
a=re.findall("a..d","abcdeoo0pdfd")
b=re.findall("..","abcdeoo0pdfd")
print(a)
print(b)
#输出结果:
['abcd']
['ab', 'cd', 'eo', 'o0', 'pd', 'fd']
2)^用于查看开头的字符串,只能在字符串的开头匹配内容
import re
a=re.findall("^a..d","abcdeoo0pdfd")
print(a)
#输出结果:
['abcd']
3)$用于查找结尾的字符串
import re
a=re.findall("..fd$","abcfdeoo0pdfd")
print(a)
#输出结果:
['pdfd']
4)*、+、?的区别
*匹配范围[0,+00),+匹配范围[1,+00),?匹配范围[0,1],均符合贪婪匹配规则,有则取最大的
import re
a=re.findall("abd*","abcfdeoodab")
b=re.findall("abd+","abcfdeoodab")
print(a)
print(b)
#输出结果:
['ab', 'ab']
[]
还可以混合使用
import re
a=re.findall("alex*?","abcfdealexxxxxx")
b=re.findall("alex+?","abcfdealexxxxxx")
print(a)
print(b)
#输出结果:
['ale']
['alex']
5){}中间内容自定义,格式{a}、{a,b}、{a,}不写默认为无穷
6)[]或,只取一个
import re
a=re.findall("a[bl]","abcfdealexxxxxx")
b=re.findall("a[a-z]","abc")
print(a)
print(b)
#输出结果:
['ab', 'al']
['ab']
7)当^放在[]里面时,表示非
import re
b=re.findall("a[^a-z]","a97bc0987654")
print(b)
#输出结果:
['a9']
8)如果想找的字符中包含元字符,用\,转义一下就是普通的字符了,查找最里面层()的内容,看实例
import re
a=re.findall("\([^()]*\)","12+66*6+2-8*(2-1)")
print(a)
#输出结果:
['(2-1)']
9)\为转义字符,,可以让有意义的变没意义,没意义的变有意义
,即让元字符变成普通字符,让普通字符变成有意义的字符
\d——匹配任何十进制数,相当于[0-9]
\D——匹配任何非数字字符,相当于[^0-9]
\s——匹配任何空白字符,相当于[\t\n\r\f\v]
\S——匹配任何非空白字符,相当于[^\t\n\r\f\v]
\w——匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W——匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b——匹配一个特殊字符边界,比如空格、#、@
10)| 为或,|作为分割线,查找左右两侧的,左侧为一个整体,右侧为一个整体
import re
a=re.findall("cb|a","cb90hfjsfafbfj")
print(a)
#输出结果:
['cb', 'a']
11)()分组
12)search()——查找一次就结束
import re
a=re.search("[a-z]+","alex36kangkang18").group()
print(a)
#输出结果:
alex
13)?P也是分组,看实例
import re
a=re.search("(?P<name>[a-z]+)\d+","alex36kangkang18").group()
print(a)
#输出结果:
alex36
加了分组,根据相应组名搜索,如下
import re
a=re.search("(?P<name>[a-z]+)\d+","alex36kangkang18").group("name")
print(a)
#输出结果:
alex
import re
a=re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36kangkang18").group("name","age")
print(a)
#输出结果:
('alex', '36')
13)split()——将字符去掉,并且分组,去掉的以”“显示
import re
a=re.split("[abc]","ablalalaoooccd")
print(a)
#输出结果:
['', '', 'l', 'l', 'l', 'ooo', '', 'd']
14)sub()——替换字符串
参数有4个,第一为需要替换的字符,第二为想要替换成的字符,第三为全部字符串,第四为替换几个,第四可有可无
import re
a=re.sub("\d","A","abcde00008888",2)
print(a)
#输出结果:
abcdeAA008888
15)subn()——可以自动统计替换次数
import re
a=re.subn("\d","A","abcde00008888")
print(a)
#输出结果:
('abcdeAAAAAAAA', 8)
14、Class
__init __()函数不能有返回值,默认返回为None