python学习记录(六)-系统内置模块
序列化
什么是序列化?序列化是指把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学习记录(六)-系统内置模块的更多相关文章
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍
目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...
- Python学习第六课
Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...
- Python学习记录day8
目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
- Python学习记录:括号配对检测问题
Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...
- python学习笔记之heapq内置模块
heapq内置模块位于./Anaconda3/Lib/heapq.py,提供基于堆的优先排序算法 堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值.这种实现可以使用 h ...
- 实验楼Python学习记录_挑战字符串操作
自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...
- Python学习笔记六
Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...
随机推荐
- 区分CommonJs/ES6 Module/AMD/CMD
模块加载方式 CommonJs ES6 Module AMD CMD UMD Commonjs和ES6 Module的区别 总结 1.CommonJS CommonJS 是一个项目,其目标是为 Jav ...
- leetcode 94. 二叉树的中序遍历【时间击败99.19%】 【内存击败39.48%】
public List<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer>al=new ArrayLis ...
- C++实现顺序表相关操作
//顺序表#include<iostream>#include<cstdlib>//C中stdlib.h动态分配内存using namespace std;#define OK ...
- oracle查看归档信息
1.查看归档信息 show parameter recovery_file_dest #查看归档目录 show parameter recovery_file_dest_size #查看归档可以存储的 ...
- 常用的accept 属性值
*.3gpp audio/3gpp, video/3gpp 3GPP Audio/Video *.ac3 audio/ac3 AC3 Audio *.asf allpication/vnd.ms-as ...
- SEO高质量外链怎么做?
其实seo是一个很枯燥的东西,说技术也没有什么技术可言 1.你需要每天坚持更新你的网站,坚持写软文 2.你需要每天发外链,而且有质量的外链 3.你需要每天交换友情链接来增加网站的权重名 4.你需要每天 ...
- 【SQL Server】numeric——精确数字的数据类型
NUMERIC数据类型是一种精确数字数据类型. numeric是标准sql的数据类型,格式是numeric(m,n).最多精确位数为38位,其中m表示总位数,n表示保留的小数点位数. 参数 含义 默认 ...
- oracle内存管理
关于内存管理 必须管理的内存结构是系统全局区(SGA)和实例程序全局区(instance PGA).Oracle 数据库支持各种内存管理方法,这些方法由初始化参数设置选择. 自动内存管理 Oracle ...
- 【相关杂项】stdio.h中的sprintf函数/union的作用
1.定义int sprintf(char *str, const char *format, ...) 1.paras:*str:目标字符串首指针 *format:要写入目标字符串的 ...
- Delphi中var和out
var: 传递的是参数的地址 out: 以返回值的形式返回结果,类似函数的效果:可以实现一个函数返回多个值