python常用模块
内置模块
2.1 数学模块 math
import math math.ceil(-3.9) # 向大取整 -3 math.floor(-3.9) # 向小取整 -4 # # 结果都是浮点型 math.pow(3,2) # 幂运算 9.0 math.sqrt(9) # 开平方 3.0 math.fabs(-3) # 绝对值 3.0 math.fsum([1,2,3]) # 序列和 6.0 math.modf(16.3) # 拆分为元祖 (0.3000000000000007, 16.0) math.copysign(-3,-3) # 将第二个参数的标志给第一个值 -3.0
import random random.random() # 随机生成 0 到 1 的16位小数 random.uniform() # 指定范围生成随机16位小数 random.randrange() # 随机生成一个,同range random.choice() # 从序列中随机取一值 random.sample() # 从序列中随机取多值 random.shuffle() # 随机打乱原来的序列
2.3 序列化模块 pickle & json
# pickle import pickle pickle.dumps() # 序列化(二进制字节流) pickle.loads() # 反序列化 pickle.dump() # 将数据序列化后,写入文件 pickle.load() # 将文件反序列化后读取出来 # json import json # 可序列化类型 (int,float,bool,str,list,tuple,dict,None) json.dumps() # 序列化(字符串) # 参数(序列化数据,ensure_ascii = False ,sort_keys=True) json.loads() # 反序列化 json.dump() # 将数据序列化后,写入文件 json.load() # 将文件反序列化后读取出来 # 不同点 """ 1、pickle 对于Python可以序列化一切,功能强大;json 对于其他语言来说,互通性较强,应用广泛。 2、pickle 存储,读取数据,可以连续(有标识符),而json 可以连续储存,但不能连读取 解决json不能连续读取的方法: dic1 = {"a":1,"b":2} dic2 = {"c":3,"d":4} # 连续储存 with open("a1.json",mode="w",encoding="utf-8") as f: json.dump(dic1,f) f.write("\n") json.dump(dic2,f) f.write("\n") # 读取 with open("a1.json",mode="r",encoding="utf-8") as f: for i in f: res = json.loads(i) print(i) """
2.4 时间模块 time
import time time.time() # 获取时间戳 time.ctime() # 将时间戳转化为时间字符串,默认为当前时间 time.localtime() # 将时间直戳,转换为时间元组,默认为当前时间 time.strftime("%Y-%m-%d %H:%M:%S") # 格式化时间元组为字符串 res = "1997年11月22日,19点22分61秒" res1 = time.strptime(res,"%Y年%m月%d日,%H点%M分%S秒") # 将字符串带有的时间元素提取出来
2.5 压缩模块 zipfile & tarfile
import zipfile # 创建chishi压缩文件夹 z = zipfile.ZipFile("chishi.zip","w",zipfile.ZIP_DEFLATED) # 将/home/bajie/路径下的 笔记.py 压缩 z.write("/home/bajie/笔记.py","笔记.py") # 将/home/bajie/路径下的 笔记.py 压缩至chisi.zip/python 下 z.write("/home/bajie/笔记.py","/python/笔记.py") # 关闭文件 z.close() # with 语句 打开chishi压缩文件 with zipfile.ZipFile("chishi.zip","r") as z : # 将当前目录的 笔记.py 解压至 /home/bajie/hahaha z.extract("笔记.py","/home/bajie/hahaha") # 解压所有文件 至 /home/bajie/hahaha z.extractall("/home/bajie/hahaha") # 追加文件 with zipfile.ZipFile("chishi.zip","a",zipfile.ZIP_DEFLATED) as z : z.write("/home/bajie/job.py") # 查看所有文件名,返回列表 print(z.namelist()) ################################################################################################ import tarfile with tarfile.open("文件名","模式",encoding = "utf-8") as tf: """模式 w 单纯打包 文件名后缀 .tar w:gz gz算法打包 文件名后缀 .tar.gz w:bz2 bz2算法打包 文件名后缀 .tar.bz2 """ # 压缩 with tarfile.open("ceshi1.tar.bz2","w:bz2",encoding = "utf-8") as tf: tf.add("路径/文件名","别名") # 解压 with tarfile.open("ceshi1.tar.bz2","w:bz2",encoding = "utf-8") as tf: tf.extract("路径/文件名","路径") # 单个文件 tf.extractall("路径") # 所有文件 # 追加(只能追加单纯打包的tar文件) # 查看 with tarfile.open("ceshi1.tar.bz2","w:bz2",encoding = "utf-8") as tf: tf.gatnames()
2.6 os 系统操作模块
import os # 方法 os.system() # 执行系统命令 os.popen() + read() # 执行系统命令接收返回值,防止字符串乱码,配合read()读取数据。 """ res = os.popen() print(res.read()) """ os.listdir() # 获取文件夹目录 . 当前目录 .. 上一级目录 os.getcwd() # 获取该文件的路径 __file__ # 获取该文件的路径+文件名 os.chdir() # 修改工作路径 # 属性 os.environ # 获取系统环境变量 # 添加环境变量 os.environ["PATH"] += "需要添加的路径" # 命令行执行可执行文件 os.name # 获取系统标识符 os.sep # 获取系统路径分割符 os.linesep # 获取系统换行符 ################################################################################################ os.mknod () # 创建文件 os.remove() # 删除文件 os.mkdir() # 创建文件夹 os.rmdir() # 删除文件夹 os.rename() # 重命名 os.makedirs() # 批量创建文件夹 os.removedirs() # 批量删除文件夹(为空的时候删除) ################################################################################################ # os.path os.path.basename() # 获取完整路径中的文件名部分 os.path.dirname() # 获取完整路径中的路径部分 os.path.split() # 将路径拆分成单独的文件部分和路径部分,组合成一个元组 os.path.join() # 路径的拼接 os.path.isdir() # 判断是否是文件夹 os.path.isfile() # 判断是否是文件 os.path.link() # 判断是否是链接 os.path.getctime() # 获取创建时间 os.path.getmtime() # 获取修改时间 os.path.getatime() # 获取访问时间 os.path.getsize() # 获取文件大小 os.path.exists() # 检测路径是否存在 os.path.isabs() # 判断是否是绝对路径 os.path.abspath() # 将相对路径转化为绝对路径
2.7 shutil 文件操作模块
import shutil # shutil 模块 shutil.copyfileobj("文件句柄1","文件句柄2") # 复制文件,需要提前拿到文件句柄 shutil.copyfile("文件名1","文件名2") # 复制文件内容,文件2可以不存在 shutil.copymode("文件名1","文件名2") # 复制文件权限位 shutil.stat("文件名1","文件名2") # 复制文件所有状态,不包括内容 shutil.copy("文件名1","文件名2") # 复制文件权限和内容,不复制状态 shutil.copy2("文件名1","文件名2") # 复制文件一切 shutil.copytree("文件夹1","文件夹2") # 复制文件夹 shutil.retree("文件夹") # 删除文件夹(有内容也删除) shutil.move("path1","path2") # 移动
2.8 正则表达式 re模块
2.8.1 正则表达式元字符
预定字符集(单个字符) | 匹配内容 |
---|---|
. | 除换行之外的所有字符 |
\d | 数字 |
\D | 非数字 |
\w | 数字字母下划线(py支持中文) |
\W | 非数字字母下划线(py支持中文) |
\s | 空白(\n,\t,\r," ") |
\S | 非空白(\n,\t,\r," ") |
\n | 换行 |
\t | 制表符 |
| | 或 |
[] | 字符组 |
[^+-*/] | ^在字符组里表示非,除了+-*/ |
(a|b) | 分组,一个整体,优先显示括号内的匹配结果 |
(?:a) | b取消有限显示,显示全部匹配结果 |
(?P<组名>) | 命名分组 |
(?P = 组名) | 引用分组 |
边界符(以 'regex' 为例) | |
\br | 左边界 r |
x\b | 右边界 x |
^r | 以 r 开头 |
x$ | 以 x 结尾 |
量词 | |
? | 0 或1次 |
+ | 1或多次 |
* | 0或多次 |
{x,y} | 大于等于x,小于等于y次 |
{x} | x次 |
# 贪婪匹配(向更多次匹配) # 语法: ------> 量词 修饰 . # 示例 import re print(re.findall(".*a","15da \la")) # ['15da \\la'] # 非贪婪匹配(向更少次匹配) # 语法: ------> ? 修饰 .量词 print(re.findall(".*?a","15dala")) # ['15da', 'la'] # 命名分组 """ (?P<组名>) 给这个组起一个名字 (?P=组名) 引用之前组的名字,把该组名匹配到的内容放到当前位置 """ strvar = "<div>今天天气不错~</div>" re.findall("<(.*?)>(.*?)<(.*?)>",strvar) # [('div', '今天天气不错~', '/div')] # 反向引用 ( \1 == 第一个分组内容 ) re.findall(r"<(.*?)>(.*?)<(/\1)>",strvar) # [('div', '今天天气不错~', '/div')] # 引用分组 strvar = "a1b2cab" obj = re.search(r"(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)(?P=tag1)(?P=tag2)",strvar)
2.8.2 re模块
import re re.findall("正则表达式","待匹配字符串") # 将所有配的结果加入到返回值列表当中 re.dinditer("正则表达式","待匹配字符串") # 将所有配的结果的对象加入到返回值迭代器中 obj = re.search("正则表达式","待匹配字符串") # 将第一次匹配到的结果储存到返回值 obj 对象当中 obj.group() # 显示匹配结果 obj.groups() # 显示分组里的内容 re.split("[切割内容]","待切割字符串") # 切割 re.sub("[替换内容]","[替换内容]",次数) # 替换 re.sunb("[替换内容]","[替换内容]",次数) # 返回元组("内容",次数) res = re.compile("正则表达式") # 定义匹配规则,终身使用 res.findall("待匹配字符串") res.split("待切割字符串") # 修饰符 re.I #用法 res = re.compile("正则表达式",flags = re.I) 不区分大小写 # 示例 strvar = "abJDn15" res = re.compile("[A-Z]",flags = re.I) print(res.findall(strvar)) # ['a', 'b', 'J', 'D', 'n'] re.M #用法 res = re.compile("正则表达式",flags = re.M ) 多行匹配 strvar = """abJ Dn15""" res = re.compile("[A-Z]",flags = re.M) print(res.findall(strvar)) # ['J', 'D'] re.S #用法 res = re.compile("正则表达式",flags = re.S ) 匹配一切(包括换行符) strvar = """abJ Dn15""" res = re.compile("^A(?:.*?)5$",flags = re.S | re.I) print(res.findall(strvar)) # ['abJ\nDn15']
2.9 sys 系统模块
import sys sys.path() # 获取所有环境变量路径,返回值是列表