Python模块
Posted 少年_不识愁滋味
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
时间加减
1 print(datetime.date.fromtimestamp(time.time())) # 时间戳直接转成日期格式 2019-12-29 2 print(datetime.datetime.now()) # 当前时间 3 print(datetime.datetime.now() + datetime.timedelta(3)) # 当前时间+3天 4 print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 当前时间+3小时 5 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) # 当前时间+30分钟 6 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]) 洗牌,随机数出序列
生成随机验证码(不完善)
1 import random 2 3 checkcode = ‘‘ 4 5 for i in range(4): 6 # i = 0 7 current = random.randrange(0, 4) 8 # 字母 9 if current == i: 10 tmp = chr(random.randint(65, 90)) # 随机字母是大写的 11 # tmp = chr(random.randint(97, 122)) # 随机字母是小写的 12 13 # 数字 14 else: 15 tmp = random.randint(0, 9) 16 checkcode += str(tmp) 17 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,load
pickle模块提供了四个功能:dumps,dump,loads,load
hashlib模块
用于加密相关的操作,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法,越往后越安全
1 import hashlib 2 3 m = hashlib.md5() 4 m.update(b"Hello") 5 print(m.digest()) # 2进制格式hash 6 print(m.hexdigest()) # 16进制格式hash 7 m.update(b"It‘s me") 8 print(m.hexdigest()) 9 m.update(b"It‘s been a long time since we spoken...") 10 print(m.hexdigest()) 11 12 m2 = hashlib.md5() 13 m2.update(b"HelloIt‘s me") 14 print(m2.hexdigest())
hmac模块
它内部对我们创建key和内容再进行处理然后再加密
import hmac h = hmac.new(b‘admin‘, ‘wull‘.encode(encoding=‘utf-8‘)) print(h.digest()) print(h.hexdigest())
re模块
常用正则表达式符号 ‘.‘ 默认匹配除 之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 ‘^‘ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a"," abc eee",flags=re.MULTILINE) ‘$‘ 匹配字符结尾,或e.search("foo$","bfoo sdfsf",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") 是匹配不到的 ‘‘ 匹配字符结尾,同$ ‘d‘ 匹配数字0-9 ‘D‘ 匹配非数字 ‘w‘ 匹配[A-Za-z0-9] ‘W‘ 匹配非[A-Za-z0-9] ‘s‘ 匹配空白字符、 、 、 , re.search("s+","ab c1 3").group() 结果 ‘ ‘ ‘(?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"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
以上是关于Python模块的主要内容,如果未能解决你的问题,请参考以下文章