day23 Pyhton学习 昨日回顾.re模块.序列化模块
一.昨日回顾
#__file__查看当前文件所在的绝对路径
#time 时间模块
time.time 获取当前时间戳时间
字符串->time.strptime->结构化->mktime->时间戳
时间戳->gmtime.localtime->结构化->strftime->字符串(格式化)
#random 随机数模块
random.randint() 随机整数
random.randrange() 可以有步长,顾头不顾尾
random.choice([]) 随机选择
random.sample(iterable,n) 从一个可迭代变量中随机取n个值
#os 和操作系统交互的模块
os.rename 重命名
os.remove 删除
os.mkdir/os.makedirs 创建单层目录/创建多级目录
os.rmdir/os.removedirs 删除单层目录/多层目录
os.listdir 查看某个路径下的文件夹和文件
os.getcwd 获取当前文件的工作目录:在哪里执行py文件
os.chdir 修改当前文件的工作目录
os.stat 获取文件信息
os.system 运行shell命令,直接显示
os.popen 运行shell命令,获取执行结果
os.path.abspath 获取当前文件的规范的绝对路径
os.path.split 切割为目录 和文件名
os.path.dirname 目录
os.path.basename 文件名
os.path.join('绝对路径','文件夹/文件名')#拼接目录
os.path.exits 如果path存在返回True,否则返回False
os.path.isfile 如果path存在是文件返回True,否则返回False
os.path.isdir 如果path存在是目录返回True,否则返回False
os.path.getsize 返回文件大小
sys 和python解释器交互的模块
sys.argv 不加括号,所以不是方法
返回一个列表,执行py文件的时候,输入什么argv里就有什么
sys.path 导入模块的时候的搜索路径
sys.platform 查看当前的操作系统
sys.version 查看当前的python版本
re 正则模块
正则表达式
元字符
\w 数字字母下划线
\W 非数字字母下划线
\d 数字
\D 非数字
\s 空白符(空格\制表符\换行符)
\S 非空白符
\t 制表符
\n 换行符
\b 单词的边界
. 除了换行符以外的所有
^ 以什么开始
$ 结尾
[..] 字符组
[^..]非字符组
| 或(包含关系中,长的在前面)
() 分组(在或的两端,在添加量词的时候,findall的时候优先要显示的)
量词
{n}
{n,}
{n,m}
? 0,1
+ 1,~
* 0,~
元字符->一个字符匹配
元字符量词->默认贪婪匹配
元字符量词?->惰性匹配/非贪婪模式
转义符\ :r'正则'
re模块
findall 找所有 返回列表
search 只找第一个 返回一个变量 .group取值
match 只找从头开始的第一个 返回一个变量 .group取值
findall和分组
优先显示分组内的
findall(?:正则表达式)-->取消分组的优先显示
search和分组
group(n)来获取具体某个分组中的内容
二.今日内容
re模块结束
re模块中的其他方法
re模块中 分组命名相关的语法
split():
import re s = 'alex83wusir60yuan25' ret = re.split('\d+',s) print(ret)#['alex', 'wusir', 'yuan', ''] s = 'alex83wusir60yuan25' ret = re.split('(\d+)',s) print(ret)#['alex', '83', 'wusir', '60', 'yuan', '25', ''] # s = 'alex83wusir60yuan25' # ret = re.sub('\d+','|',s,1)#参数1表示只替换1个
# print(ret)#alex|wusir60yuan25 # ret = re.subn('\d+','|',s)print(ret)#('alex|wusir|yuan|', 3)#
返回元组(替换的结果,替换了多少次)
# '\d+' --> 字节码的过程 # 在多次执行同一个正则表达式的时候compile事先编译 # 正则表达式为字节码,效率更高 - 节省时间
# ret = re.findall('\d+','alex83wusir60yuan25') # print(ret) # ret = re.compile('\d+') # ret2 = ret.findall('alex83wusir60yuan25') # print(ret2)
# 节省空间 ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器 print(ret) # <callable_iterator object at 0x10195f940> print(next(ret).group()) #查看第一个结果 print(next(ret).group()) #查看第二个结果 print([i.group() for i in ret]) #查看剩余的左右结果
# 序列(str)化 # 什么是序列 : list tuple str # 国际化 结果就是国际 # 单一化 结果就是单一 # 序列化 结果是序列str # json # menu = {'key':"value","k":['v']} import json # 把其他的数据类型 -序列化(dumps)-> 字符串 # 字符串 -反序列化(loads)-> 把其他的数据类型 # ret = json.dumps(menu) # 把其他的数据类型 -序列化(dumps)-> 字符串 # # print(ret) # json格式的字符串 # # print(menu) # dict # with open('file','w',encoding='utf-8') as f: # f.write(ret) # with open('file','r',encoding='utf-8') as f: # dic = f.read() # print(dic) # diccc = json.loads(dic) # 字符串 -反序列化(loads)-> 把其他的数据类型 # print(diccc['k']) # 数据类型 <-转换-> 字符串 # 1.存储在硬盘上 写的每一个字符必须是字符串/bytes数据类型 # 2.网络传输的时候 必须传递bytes/字符串数据类型 # menu = {'key':"value","k":{'v',1,2}} # 不支持集合 # ret = json.dumps(menu) # dic = json.loads(ret) # menu = {'key':"value","k":(1,2,3)} # 不支持元组,元组被当成列表来序列化 # ret = json.dumps(menu) # print(ret) # dic = json.loads(ret) # print(dic) # menu = {'key':"value",1:'vvv'} # 字典中的key只能是字符串 # ret = json.dumps(menu) # print(ret) # dic = json.loads(ret) # print(dic) # 优缺点: # 优: 所有的语言都通用 # 缺: 能支持的数据类型少 :dict list str 数字
import json # 把其他的数据类型 -序列化(dumps)-> 字符串 # 字符串 -反序列化(loads)-> 把其他的数据类型 # ret = json.dumps(menu) # 把其他的数据类型 -序列化(dumps)-> 字符串 # # print(ret) # json格式的字符串 # # print(menu) # dict # with open('file','w',encoding='utf-8') as f: # f.write(ret) # with open('file','r',encoding='utf-8') as f: # dic = f.read() # print(dic) # diccc = json.loads(dic) # 字符串 -反序列化(loads)-> 把其他的数据类型 # print(diccc['k'])
# dump/load 专门和文件打交道的方法 import json # menu = {'key':"value","k":['v']} # f = open('file','a') # json.dump(menu,f) # f.close() # f = open('file','r') # ret = json.load(f) # print(ret,type(ret)) # f.close()
import json # data = {'username':['李华','二愣子'],'sex':'male','age':16} # json_dic2 = json.dumps(menu,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False) # json_dic2 = json.dumps(menu) # print(json_dic2) # file文件中的所有字符串都必须是""不能是单引号 # 在json中有一些参数能帮助你整理序列化之后的格式,但是这些内容一般在网络传递和文件存储的过程中并不需要
序列化模块pickle
# pickle的优缺点
# 支持python中的几乎所有数据类型
# 只支持在python程序之间交换数据
import pickle
menu = {'key':"value","k":{'v',1,2}}
# ret = pickle.dumps(menu)
# print(type(ret),ret)
# dic = pickle.loads(ret)
# print(dic)
menu = {'key':"value","k":(1,2,3)}
# ret = pickle.dumps(menu)
# print(type(ret),ret)
# dic = pickle.loads(ret)
# print(dic)
menu = {'key':"value",1:'vvv'}
# ret = pickle.dumps(menu)
# print(type(ret),ret)
# dic = pickle.loads(ret)
# print(dic)
# menu = {'key':"value",1:{1,2,3}}
# with open('file','wb') as f:
# pickle.dump(menu,f)
# with open('file','rb') as f:
# ret = pickle.load(f)
# print(ret[1])
# menu = {'key':"value",1:{1,2,3}}
# with open('file','wb') as f:
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# pickle.dump(menu,f)
# with open('file','rb') as f:
# while True:
# try:
# ret = pickle.load(f)
# print(ret)
# except EOFError:
# break
# json dumps/loads
# 字符串的json数据 = json.dumps(其他数据类型)
# 其他数据类型= json.loads(字符串的json数据)
# pickle dumps/loads dump/load
# bytes的pickel数据 = pickle.dumps(其他数据类型)
# 其他数据类型= pickle.loads(bytes的pickel数据)
# pickle.dump(数据类型,文件句柄) # 这个数据类型被写到文件里了
# pickle.load(文件句柄) # 这个文件里的数据类型
# 基础数据类型 # tuple # list # dict # list # 队列 # 双端队列 # queue 队列 : 特殊的数据类型:放到队列里 # 先进先出 FIFO # stack 栈 : 算法里 # 先进后出 # 三级菜单 # 计算文件夹大小
# 队列 # 栈 # 了解 列表的使用注意事项 # l.insert() # l.pop(0) # 频繁的对数据类型进行修改 : deque # from collections import Counter # c = Counter('abcdeabcdabcaba') # print(c)