1.定义
模块:用来从逻辑上组织python代码,本质就是.py结尾的python文件。
包:用来从逻辑上组织模块的,本质就是一个目录(必须带有init.py文件)__int.py用于标识当前文件夹是一个包。
2.import本质
导入模块的本质就是把python文件解释一遍
import modelName->modelName.py->modelName.py的路径->sys.path
导入包的本质就是执行该包下的init.py文件
3.内置模块
(1).time和datetime
a.时间戳(timestamp)
b.格式化时间字符串
c.元祖(struct_time)
a->c:gmtime(结果为UTC时区) localtime(UTC+8时区)
c->a:mktime
c->b:strftime(format,time_tuple)
b->c:strptime(string,format)
(2).random
random.randint(x,y)#随机产生[x,y]之间的数
random.randrange(x,y)#随机产生[x,y)之间
random.choice()#从(列表or字符串or元祖)中随机抽取一个
random.sample('str',n)#从str中随机抽取n个字符
random.random()#随机浮点数
random.uniform(x,y)#随机产生x,y中间的浮点数
(3).sys
sys.argv #命令行参数list,第一个元素是程序本身路径
sys.exit(0)#退出
sys.maxint #最大的int值
sys.path#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称
(4).shutil#文件的copy、压缩包
shutil.copyfileobj(src,dst.length)
shutil.copyfile(src,dst)#拷贝文件
shutil.copymode(src,dst)#仅拷贝权限。内容、组、用户均不变
shutil.copystat(src,dst)#拷贝状态的信息
shutil.copy(src,dst)#拷贝文件和权限
shutil.copy2(src,dst)#拷贝文件和状态信息
shutil.copytree(src,dst,symlinks=False,ignore=Nono)#递归的去拷贝文件
shutil.rmtree(file)#递归删除文件
shutil.move(src,dst)#递归的移动文件
shutil.make_archive(base_name,format,...)#base_name(文件名)、fromat(压缩包种类)主要是调用ZipFile和TarFile
(5).hashlib#用于加密相关的操作
import hashlib
m=hashlib.md5()
m.update(b"Hello")
print(m.hexdigest())
m=hashlib.sha1()
m.update(b"Hello")
print(m.hexdigest())
import hmac
m=hmac.new(b"Hello","It`s me".encode(encoding="utf-8"))
print(m.hexdigest())
print(m.digest())
(6).json和pickle
json#把数据进行序列化,python在内存中的数据类型不能直接写到文件(只存字符串 OR bytes)中去,必须转成(dump)字符串且数据不发生损坏。
#解决不同平台不同语言之间的数据交换
pickle#用于python特有的类型和python的数据类型间进行转换
import shelve
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
4.正则表达式
'''
'.' 默认匹配除\n之外的任意一个字符,若指定falg dotall,则匹配任意字符,包括换行
'^' 匹配字符串的开始位置。若设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
'?' 匹配?号前面的字符一次或0次~{0,1}
'+' 代表匹配前一个字符一次或多次
'$' 匹配输入字符串的结束位置
'*' 匹配*号前的字符,0次或多次
'\A' 只从字符开头开始匹配,\A[0-9]
'\Z' 匹配字符结尾,[a-z]\Z
'\d' 匹配0-9
'\D' 匹配非数字
'\w' 匹配[A-Z,a-z,0-9]
'\W' 匹配非[A-Z,a-z,0-9]
'[a-z]' 匹配指定范围内的任意字符。
'{n,m}' 最少匹配n次且最多匹配m次
'{m}' 匹配m次
'|' 两个匹配条件进行逻辑“或”
'(...)' 分组匹配
'\s' 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
'\S' 匹配任何可见字符。等价于[^ \f\n\r\t\v]。
'''
import re
res=re.match("^.+","helloworld123")#从字符串头开始往后匹配
#res=re.search()#整个文本内匹配包含
#res=re.findall("[0-9]{3}","123hjk345kl464")#把所有匹配到的字符放到以列表中的元素返回
#res=re.split("[0-9]","asf1234df23af")#以匹配到的字符当散列表分隔符
#res=re.sub(pattern,replace,string,count)#匹配字符并替换,count代表替换次数
res=re.search("(?P<id>[0-9]+)","asdf1234asdf")
print(res.group())
print(res.groupdict())
res=re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","asdf1234asdf")
print(res)
print(res.group())
print(res.groupdict())
res=re.search("(?P<Province>[0-9]{4})(?P<city>[0-9]{2})(?P<bir>[0-9]{4})","123321199008171021")
print(res.groupdict())
res=re.split("[0-9]+","asf1234df23af")
print(res)
#re.I(re.IGNORECASE)#忽略大小写
res=re.search("[a-z]+","adfA",flags=re.IGNORECASE)
print(res)
#re.S(re.s)#改变.的任意匹配模式,不将\n除外
res=re.search(r".+","\nadf\nadf",flags=re.S)
print(res)