序列化

什么是序列化?序列化是指把python中的数据以文本或二进制形式进行转换,还能反序列化为原来的数据

为什么需要序列化?便于数据在程序与网络之间的传输和存储

json:文本序列化

pickle:二进制序列化

pickle序列化

import pickle
vars = 'abc'
# 序列化
res = pickle.dumps(vars)
print(res,type(res)) # b'\x80\x03X\x03\x00\x00\x00abcq\x00.' <class 'bytes'>
# 反序列化
res = pickle.loads(res)
print(res,type(res)) # abc <class 'str'>
# 序列化后写入文件
vardict = {'a':1,'b':2}
with open('./2.txt','wb') as fp:
pickle.dump(vardict,fp)
# 读取文件并反序列化
with open('./2.txt','rb') as fp:
res = pickle.load(fp)
print(res) # {'a': 1, 'b': 2}

json序列化

import json
vardict = {'name':'张三','age':18}
# 序列化
res = json.dumps(vardict)
print(res,type(res)) # {"name": "\u5f20\u4e09", "age": 18} <class 'str'>
# 反序列化
res = json.loads(res)
print(res) # {'name': '张三', 'age': 18}
# 序列化后写入文件
with open('./2.txt','w',encoding='utf-8') as fp:
json.dump(vardict,fp)
# 读取文件并反序列化
with open('./2.txt','r',encoding='utf-8') as fp:
res = json.load(fp)
print(res) # {'name': '张三', 'age': 18}

数学模块math

import math
# 向上取整
print(math.ceil(2.4)) # 3
# 向下取整
print(math.floor(2.4)) # 2
# 次方
print(math.pow(2,3)) # 8.0
# 开平方
print(math.sqrt(4)) # 2.0
# 绝对值
print(math.fabs(-8)) # 8.0
# 拆分成小数和整数组成的无组
print(math.modf(3.14)) # (0.14000000000000012, 3.0)
print(math.modf(3)) # (0.0, 3.0)
# 第2个参数的符号赋给第1个参数
print(math.copysign(2,-5)) # -2.0
print(math.copysign(-2,5)) # 2.0
# 求和
print(math.fsum([1,2,3])) # 6.0
# 阶乘(1*2*3*4)
print(math.factorial(4)) # 24
# 常数pai
print(math.pi) # 3.141592653589793

随机模块random

import random
# 返回[0,1)之间的小数
print(random.random()) # 0.24414562957962638
# 返回[0,9)之间的整数
print(random.randrange(9)) # 5
# 返回[2,9)之间的整数
print(random.randrange(2,9)) # 8
print(random.randint(2,9)) # 4
# 返回[2,9)步进值是2之间的整数
print(random.randrange(2,9,2)) # 4
# 返回[2,9)之间的小数
print(random.uniform(2,9)) # 4.383964391698797
# 返回指定容器中的数据
print(random.choice([1,5,2,3,10,25])) # 10
# 随机打乱容器中的顺序
varlist = [1,2,3,4,5]
random.shuffle(varlist)
print(varlist) # [5, 3, 2, 4, 1]

操作系统接口模块os-1

import os
# 获取当前工作目录
print(os.getcwd()) # C:\Users\OSAN\Desktop\code
# 修改当前工作目录
os.chdir('D:')
print(os.getcwd()) # D:\
# 获取当前或指定目录中所有项,相当于dir
print(os.listdir())
print(os.listdir('E:\project'))
# 创建文件夹(不能递归创建)
os.mkdir('aaa') # 在当前工作目录下创建文件夹aaa
os.mkdir(r'E:\aaa') # 在指定目录下创建文件夹aaa
# 创建文件夹(可以递归创建)
os.makedirs(r'abc\a\b\c') # 在当前工作目录下创建文件夹abc\a\b\c

操作系统接口模块-os2

import os
os.chdir('D:') # 修改当前工作目录
os.makedirs(r'abc\a\b\c') # 创建目录abc\a\b\c
# 删除文件夹(不能递归)
os.rmdir('abc') # OSError: [WinError 145] 目录不是空的。: 'abc'
os.rmdir(r'abc\a\b\c') # 成功删除c文件夹
# 删除文件夹(可以递归)
os.removedirs('abc') # OSError: [WinError 145] 目录不是空的。: 'abc'
os.removedirs(r'abc\a\b') # 成功删除abc文件夹
# 删除文件
os.remove('1.txt')
# 重命名文件或文件夹
os.rename('a.txt','b.txt')
os.rename('other','other2')
# 执行系统命令
os.system('control') # 打开控制面板

操作系统接口模块-os.path

import os
# 相对路径转为绝对路径
print(os.path.abspath('./')) # C:\Users\OSAN\Desktop\code
# 返回路径中最后一部分
print(os.path.basename(r'C:\Users\OSAN\Desktop\code')) # code
print(os.path.basename(r'C:\Users\OSAN\Desktop\code\a.txt')) # a.txt
# 返回路径中最后一部分之前的路径
print(os.path.dirname(r'C:\Users\OSAN\Desktop\code')) # C:\Users\OSAN\Desktop
print(os.path.dirname(r'C:\Users\OSAN\Desktop\code\a.txt')) # C:\Users\OSAN\Desktop\code
# 拼接路径
print(os.path.join(r'C:\Users\OSAN\Desktop','a.txt')) # C:\Users\OSAN\Desktop\a.txt
# 拆分路径
print(os.path.split(r'C:\Users\OSAN\Desktop\code')) # ('C:\\Users\\OSAN\\Desktop', 'code')
print(os.path.split(r'C:\Users\OSAN\Desktop\code\a.txt')) # ('C:\\Users\\OSAN\\Desktop\\code', 'a.txt')
# 拆分路径文件后缀名
print(os.path.splitext(r'C:\Users\OSAN\Desktop\code')) # ('C:\\Users\\OSAN\\Desktop\\code', '')
print(os.path.splitext(r'C:\Users\OSAN\Desktop\code\a.txt')) # ('C:\\Users\\OSAN\\Desktop\\code\\a', '.txt')
# 获取文件大小(字节)
print(os.path.getsize('./2.txt')) # 35
print(os.path.getsize('./我是一个不存在的文件.txt')) # FileNotFoundError: [WinError 2] 系统找不到指定的文件。: './我是一个不存在的文件.txt'
# 检测文件夹是否存在
print(os.path.isdir(r'C:\Users\OSAN\Desktop\code')) # True
# 检测文件是否存在
print(os.path.isfile('./2.txt')) # True
# 检测路径是否存在(文件夹和文件都可以)
print(os.path.exists(r'C:\Users\OSAN\Desktop\code')) # True
print(os.path.exists('./2.txt')) # True
# 检测两个路径是否指向同一个文件
r1 = r'C:\Users\OSAN\Desktop\code\2.txt'
r2 = r'C:\Users\OSAN\Desktop\..\Desktop\code\2.txt'
print(os.path.samefile(r1,r2)) # True

高级文件操作模块-shutil

import shutil
# 复制文件
shutil.copy('./old.txt','D:/new.txt')
shutil.copy2('./old.txt','D:/new2.txt') # 创建时间、权限等一并复制
shutil.copyfile('./old.txt','D:/new3.txt') # 打开文件,读取内容,写入新文件中
# 复制整个目录结构和文件
shutil.copytree('./a','./b')
# 删除整个目录结构和文件
shutil.rmtree('./b')
# 移动文件夹和文件
shutil.move('./a','./b')

压缩模块-zipfile

import zipfile
# 压缩
with zipfile.ZipFile('./newpack.zip','w',zipfile.ZIP_DEFLATED) as myzip:
myzip.write('./1.txt')
myzip.write('./2.txt')
# 解压缩
with zipfile.ZipFile('./newpack.zip','r') as myzip:
myzip.extractall('./')
# 文件夹压缩
import shutil
shutil.make_archive('newpack','zip','./')

时间模块-time

import time
# 时间戳(从1970年1月1日0时0分0秒到现在的秒数)
print(time.time()) # 1608636615.5876932
# 当前系统时间(时间字符串)
print(time.ctime()) # Tue Dec 22 19:31:38 2020
print(time.ctime(1608636615.5876932)) # Tue Dec 22 19:30:15 2020
# 当前系统时间(时间元组)
print(time.localtime()) # time.struct_time(tm_year=2020, tm_mon=12, tm_mday=22, tm_hour=19, tm_min=33, tm_sec=38, tm_wday=1, tm_yday=357, tm_isdst=0)
print(time.localtime(1608636615.5876932)) # time.struct_time(tm_year=2020, tm_mon=12, tm_mday=22, tm_hour=19, tm_min=30, tm_sec=15, tm_wday=1, tm_yday=357, tm_isdst=0)
print(time.localtime().tm_year) # 2020
# 时间格式化
print(time.strftime('%Y-%m-%d %H:%M:%S %w')) # 2020-12-22 19:48:30 2
# 睡眠(秒)
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2020-12-22 19:56:06
time.sleep(3)
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2020-12-22 19:56:09
# 程序运行时间(秒)
start = time.perf_counter()
for i in range(10000):
i += 1
end = time.perf_counter()
print(end-start) # 0.00393660000000029

日历模块-calendar

import calendar
res = calendar.monthrange(2020,12)
week = res[0] + 1
days = res[1]
print(f'2020年12月一共{days}天,第1天是周{week}')

正则表达式

转义字符:
\w 单个 字母、数字、下划线 \W 单个 非字母、非数字、非下划线
\d 单个 数字 \D 单个 非数字
\s 单个 空白符、制表符 \S 单个 非空白符、非制表符
特殊字符:
. 单个 任意字符,除了换行符
* 匹配次数 任意次数(包括0次)
+ 匹配次数 至少一次
? 拒绝贪婪 前面的匹配规则只要达成即可
{}匹配次数
[]取值范围
()子组提取,在整个匹配结果中用res.groups()再单独提取()中的内容
^限制开头
$限制结尾
模式:I U
import re
# 基本操作
varstr = 'wo123de45ma6ya78'
reg1,reg2,reg3 = '123','\d','\d\d' # \d代表单个数字
print(re.findall(reg1,varstr)) # ['123']
print(re.findall(reg2,varstr)) # ['1', '2', '3', '4', '5', '6', '7', '8']
print(re.findall(reg3,varstr)) # ['12','45','78']
# 左匹配
print(re.match('123',varstr)) # None
res = re.match('wo123',varstr)
print(res) # <re.Match object; span=(0, 5), match='wo123'>
print(res.group(),res.span()) # wo123 (0, 5)
# 搜索(从头开始找到第一个结束)
res = re.search('wo123',varstr)
print(res) # <re.Match object; span=(0, 5), match='wo123'>
print(res.group(),res.span()) # wo123 (0, 5)
# 找所有(返回列表)
varstr = 'abc12ab34bcd'
print(re.findall('ab',varstr)) # ['ab', 'ab']
# 找所有(返回跌代器)
res = re.finditer('ab',varstr)
print(list(res)) # [<re.Match object; span=(0, 2), match='ab'>, <re.Match object; span=(5, 7), match='ab'>]
# 搜索替换
print(re.sub('ab','AB',varstr)) # ABc12AB34bcd
# 数据切割
print(re.split('\d{2}',varstr)) # ['abc', 'ab', 'bcd']
# 使用正则对象直接操作
reg = re.compile('\d{2}')
print(reg.search(varstr).group()) # 12
import re
print(re.search('\d*','abc123bcd4')) # <re.Match object; span=(0, 0), match=''>
print(re.search('\d*','123bcd4')) # <re.Match object; span=(0, 3), match='123'>
print(re.search('\d+','abc123bcd4')) # <re.Match object; span=(3, 6), match='123'>
print(re.search('\d+?','abc123bcd4')) # <re.Match object; span=(3, 4), match='1'>
print(re.search('\d*?','123bcd4')) # <re.Match object; span=(0, 0), match=''>
print(re.search('\d{2}','abc123bcd4')) # <re.Match object; span=(3, 4), match='12'>
print(re.search('\d{2,5}','abc123234')) # <re.Match object; span=(3, 4), match='12323'>
print(re.search('[a-zA-Z0-9_]','abc123234')) # <re.Match object; span=(3, 4), match='a'>
res = re.search('\d(\w{2})','123bcd4')
print(res,res.groups()) # <re.Match object; span=(0, 3), match='123'> ('23',)
print(re.search('^1\d{10}$','17332138792')) # <re.Match object; span=(0, 11), match='17332138792'>
# 正则模式-不区分大小写
print(re.search('[a-z]{5,10}','aABCdef')) # None
print(re.search('[a-z]{5,10}','aABCdef',re.I)) # <re.Match object; span=(0, 7), match='aABCdef'>

python学习记录(六)-系统内置模块的更多相关文章

  1. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  2. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  3. python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍

    目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...

  4. Python学习第六课

    Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...

  5. Python学习记录day8

    目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...

  6. Python学习记录day7

    目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...

  7. Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  8. python学习笔记之heapq内置模块

    heapq内置模块位于./Anaconda3/Lib/heapq.py,提供基于堆的优先排序算法 堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值.这种实现可以使用 h ...

  9. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  10. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

随机推荐

  1. go标准库之fmt

    go标准库之fmt fmt库 Print系列 1. Print 不换行 2. Println 换行 3. Printf 不换行,可以使用格式化占位符 格式化占位符 占位符 说明 通用 --- %v 值 ...

  2. 钉钉-E应用开发初体验(企业内部应用)

    首先要创建应用,如何创建参考 https://open-doc.dingtalk.com/microapp/bgb96b/gt5d6a 下载 钉钉E应用服务端demo   git clone http ...

  3. ORACLE查看会话的大小及终止会话

    一.出现PGA不足时,我们可以查看用户会话大小,结束相应会话 方法一 Select Server, Osuser, Name, Value / 1024 / 1024 Mb, s.Sql_Id, Sp ...

  4. 暑假学习二 8.24 Hadoop的环境配置

    今日学习内容: 主要为Hadoop的环境配置,相关配置所需文档可以留言(?)会给发送 1.hadoop介绍: 狭义: 核心组件,Hadoop hdfs  分布存储 yarn   资源管理和任务调度框架 ...

  5. plsql--游标用法

    1.游标概念 在 PL/SQL 块中执行 SELECT.INSERT.DELETE 和 UPDATE 语句时,ORACLE 会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向 ...

  6. Vue3.0 里为什么要用 Proxy API 替代 defineProperty API?

    响应式优化. a. defineProperty API 的局限性最大原因是它只能针对单例属性做监听. Vue2.x 中的响应式实现正是基于 defineProperty 中的 descriptor, ...

  7. 记——flask实现全文搜索

    参考: flask入门和进阶十(实现全文搜索)已解决:https://blog.csdn.net/chengmo123/article/details/100552287 一.首先安装flask-wh ...

  8. ios怎么在自己公司网站扫描下载安装IPA安装包

    企业证书(或者99的证书,但是有100个设备限制)打包的IPA安装包,怎么发布给用户安装使用呢? 试了直接给用户.ipa包的链接,手机不能像安卓手机那样安装,平时我们测试放在蒲公英的包蒲公英应该是有做 ...

  9. 【JavaScript】JS写法随笔(二) JS动态生成表格

    主要思路:通过Ajax请求后端接口并拿到结果list之后,然后通过DOM获取tbody并向tbody中添加行.单元格. $("#calculate").click(function ...

  10. js之对象处理

    数据拼接一: 原始数据为对象 { 0grade: "" 0home: "萍钢四切(边部钩痕)" 0price: "3200" 0produc ...