Python模块
1.定义 模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的Python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个_init_.py文件)2.import本质(路径搜索和搜索路径) 导入模块的本质就是把Python文件解释一遍 导入包的本质就是执行该报下的_init_.py文件3.模块的分类 (1)标准库 (2)开源模块 (3)自定义模块4.模块详细 time & datetime模块
clock() 返回处理器时间 altzone 返回与utc时间的时间差,以秒计算 asctime() 返回时间格式 localtime() 返回本地时间 的struct time对象格式 gmtime(time.time()-800000) 返回utc时间的struc时间对象格式
时间戳 time(获取时间戳) ---------------------->struct_time(tuple)----------------------->格式化的字符串
gmtime:结果为UTC时区 strftime("格式",struct_time) localtime:结果为UTC+8时区 格式化的字符串--------------------->struct_time(tuple)----------->时间戳 strptime("格式化的字符串","格式") mktime时间加减
print(datetime.date.fromtimestamp(time.time())) # 时间戳直接转成日期格式 2019-12-29 print(datetime.datetime.now()) # 当前时间 print(datetime.datetime.now() + datetime.timedelta(3)) # 当前时间+3天 print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 当前时间+3小时 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) # 当前时间+30分钟 print(datetime.datetime.now().replace(hour=2, minute=3)) # 时间替换
random模块
random.random() 浮点数
random.uniform(1,3) 浮点数 2.*
random.randint(1,3) [1-3]整数
random.randrange(1,10,2) [1-10)步长为2
random.choice(‘hello‘) random.choice([1,3,4])
random.sample(‘hello‘,2) 取两位
random.shuffle([1,2,3,4,5,6]) 洗牌,随机数出序列生成随机验证码(不完善)
import random
checkcode = ‘‘
for i in range(4):
# i = 0
current = random.randrange(0, 4)
# 字母
if current == i:
tmp = chr(random.randint(65, 90)) # 随机字母是大写的
# tmp = chr(random.randint(97, 122)) # 随机字母是小写的
# 数字
else:
tmp = random.randint(0, 9)
checkcode += str(tmp)
print(checkcode)os模块
getcwd() 获取当前目录
chdir(‘dirname‘) 改变当前路径
curdir 返回当前目录 ‘.‘
pardir 获取当前目录的父目录 ‘..‘
makedirs(‘dirname1/dirname2‘) 递归创建目录
removedirs(‘dirname1‘) 如果目录为空则删除,并递归到上级目录,如也为空,还删,类推 清理空文件夹
mkdir(‘dirname‘) 生成单级目录
rmdir(‘dirname‘) 删除单级空目录
listdir(‘dirname‘) 列出指定目录下的所有文件和子目录
remove() 删除一个文件
rename(‘oldname‘,‘newname‘) 重命名文件/目录
stat(‘path/filename‘) 获取文件/目录信息
path.abspath(path) 返回path规范化的绝对路径
path.split(path) 将path分割成目录和文件名二元组返回
path.dirname(path) 返回path目录,其实就是path.split(path)的第一个元素
path.basename(path) 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值
path.exists(path) 如果path存在,返回true,不存在返回false
path.isabs(path) 如果是绝对路径,返回true
path.isfile(path) 如果path是一个存在的文件,返回true,否则返回false
path.isdir(path) 如果path是一个存在的目录,返回true
path.join(path1[,path2[,...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
path.getatime(path) 返回path所指向额文件或者目录的最后存取时间
path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间sys模块
argv 命令行参数List,第一个元素是程序本身路径
exit(n) 退出程序,正常退出是exit(0)
version 获取Python解释程序的版本信息
maxint 最大的int值
path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
platform 返回操作系统平台名称
stdout.write(‘please:‘)
val = sys.stdin.readline()[:-2]shutil模块
copyfileobj(fsrc,fdst[,length]) 将文件内容拷贝到另一个文件中,可以部分内容
copyfile(src,dst) 拷贝文件
copymode(src,dst) 仅拷贝权限。内容、组、用户均不变
copystat(src,dst) 拷贝状态的信息,包括:mode bits,atimemtime,flags
copy(src,dst) 拷贝文件和权限
copy2(src,dst) 拷贝文件和状态信息
copytree(src,dst,symlinks=False,ignore=None) 递归的去拷贝文件
例如:copytree(source,destination,ignore=ignore_patterns(‘*.pyc‘,‘tmp*‘))
rmtree(path[,ignore_errors[,onerror]]) 递归的去删除文件
move(src,dst) 递归的去移动文件
make_archive(base_name,format,...) 创建压缩包并返回文件路径,例如:zip,tar
base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径
format:压缩包种类,"zip","tar","bztar","gztar"
root_dir:要压缩的文件路径(默认当前目录)
owner:用户,默认当前用户
group:组,默认当前组
logger:用于记录日志,通常是logging.Logger对象shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的
import zipfile # 压缩 z = zipfile.ZipFile(‘p.zip‘, ‘w‘) z.write(‘p_test.py‘) z.close() # 解压 z = zipfile.ZipFile(‘p.zip‘, ‘r‘) z.extractall() z.close()
json & pickle模块
用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle:用于Python特有的类型和Python的数据类型间进行转换json模块提供了四个功能:dumps,dump,loads,loadpickle模块提供了四个功能:dumps,dump,loads,load
hashlib模块
用于加密相关的操作,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法,越往后越安全
import hashlib m = hashlib.md5() m.update(b"Hello") print(m.digest()) # 2进制格式hash print(m.hexdigest()) # 16进制格式hash m.update(b"It‘s me") print(m.hexdigest()) m.update(b"It‘s been a long time since we spoken...") print(m.hexdigest()) m2 = hashlib.md5() m2.update(b"HelloIt‘s me") print(m2.hexdigest())
hmac模块
它内部对我们创建key和内容再进行处理然后再加密
import hmac h = hmac.new(b‘admin‘, ‘wull‘.encode(encoding=‘utf-8‘)) print(h.digest()) print(h.hexdigest())
re模块
常用正则表达式符号
‘.‘ 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
‘^‘ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
‘$‘ 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
‘*‘ 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为[‘abb‘, ‘ab‘, ‘a‘]
‘+‘ 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘, ‘abb‘]
‘?‘ 匹配前一个字符1次或0次
‘{m}‘ 匹配前一个字符m次
‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘, ‘ab‘, ‘abb‘]
‘|‘ 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘
‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
‘\A‘ 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
‘\Z‘ 匹配字符结尾,同$
‘\d‘ 匹配数字0-9
‘\D‘ 匹配非数字
‘\w‘ 匹配[A-Za-z0-9]
‘\W‘ 匹配非[A-Za-z0-9]
‘s‘ 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘
‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘: ‘3714‘, ‘city‘: ‘81‘, ‘birthday‘: ‘1993‘}
最常用的匹配语法
re.match 从头开始匹配 有返回,匹配到了,没返回,没匹配到
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。
假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。