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)

 

posted @ 2018-11-15 15:00  Python张梦书  阅读(194)  评论(0编辑  收藏  举报