Python之模块和包——第十三天

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值