一.昨日回顾
#__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 非空白符
制表符
换行符
单词的边界
. 除了换行符以外的所有
^ 以什么开始
$ 结尾
[..] 字符组
[^..]非字符组
| 或(包含关系中,长的在前面)
() 分组(在或的两端,在添加量词的时候,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)