1.昨日内容回顾

  1、正则表达式

          # 正则表达式 —— str
               # 检测字符串是否符合要求
          # 从大段的文字中找到符合要求的内容

     1)、元字符

        #.  # 匹配除换行符以外的所有字符

# \n,\t,\b

# \w,\s,\d    \W,\S,\D

          # ^,$

# ab|a,()

          #  [...],[^...] 

     2)、量词

        # *

# +

# ?

        # {n}

        # {n,}

        # {n,m}

     3)、贪婪匹配和惰性匹配  

           .*?x  惰性匹配 

     4)、其他,转义\ 分组()

       \转义,在python中,无论是正则表达式,还是待匹配内容,都是用字符串的形式表示,字符串中\也有特殊含义,需要转义。

如‘\d’ 就必须表示成‘\\d’,正则表达式中的'\\d',就要表示成‘\\\\d’,太麻烦了写成r‘\d’ 正则中表示为r'\\d'

  2、re模块

2.常用模块

  0. re:

    1、常用函数

    1)、查询方法

      re.findall('a','abcdad',flag=0) # 匹配能匹配的所有项,返回值为一个列表

      re.search('a','abcdad')  # 返回匹配的第一个正则对象,用group()函数取值

      re.match('\d','123ddd') # 和search类似,但是从头匹配,没有返回None

    2)、替换

re.sub('\d','H','a2dfdf3',1) # 替换字符串符合匹配条件的字符,最后一个参数为替换次数,返回的是替换完成的字符串。

      re.subn('\d','H','a2dfdf3') # 替换字符串中所有符合匹配条件的字符,返回一个元组,包含替换完成的字符串和替换次数。

    3)、分割

      re.split('[abc]','abcdef')  按匹配条件进行分割。

    4)、编译

      com = re.compile('\d+') 编译一个正则表达式,之后可以用com.上面的六个函数任何一个进行相应操作。

    2、分组优先级查询

      1)、findall优先级查询:优先返回分组里的查询结果列表,不是分组的查询结果在列表中返回''

      2)、split优先级查询:加()表示保留匹配项值至结果列表中。

      取消分组优先级可以通过在分组括号()里最前面加?:

    3、?的四种用法

      1)、在量词之后:是惰性匹配的标志

2)、量词:重复0次或1次

      3)、分组命名 (?P<name>)引用的时候 (?P=name)

      4)、findall,split优先级查询,取消分组优先级:(?:正则表达式)

  1.collections

    1)、namedtuple 可命名元组

    2)、OrderedDict 有序字典

    3)、defaultdict 默认字典

    4)、deque 双端队列

    5)、Counter 计数器

6)、queue 队列 黑盒 fifo

    

from collections import *
# namedtuple
# tu = namedtuple('Point',['x','y'])
# tu1 = (1,2)
# print(tu1)
#
# OrderedDict
# o_dic = OrderedDict({'x':1,'y':2,'z':3})
# o_dic1 = OrderedDict(a=1,b=2,c=3)
# o_dic2 = OrderedDict([('a',1),('b',2),('c',3)])
#
# print(o_dic['x'])
# print(o_dic1)
# print(o_dic2)
# '''1
# OrderedDict([('a', 1), ('c', 3), ('b', 2)])
# OrderedDict([('a', 1), ('b', 2), ('c', 3)])''' # # defaultdict
# d_dic = defaultdict(lambda: 10)
# print(d_dic['k']) #
## deque
# d = deque()
# d.append(1)
# d.append(2)
# d.append(3)
# d.appendleft('a')
# print(d)
# d.popleft()
# print(d)
# d.pop()
# print(d) ## Counter
# c =Counter('dciwenjdbvwbfuhqwd')
# print(c)
'''Counter({'w': 3, 'd': 3, 'b': 2, 'n': 1, 'q': 1, 'j': 1, 'v': 1, 'h': 1, 'e': 1, 'u': 1, 'i': 1, 'c': 1, 'f': 1})'''
import queue
q = queue.Queue()
q.put(1)
q.put(2)
q.put(3)
print(q)
print(q.get())
print(q) print(q)

  2.random

    1)随机浮点数

# random.random() # 随机一个0-1之间的浮点数

      # random.uniform(1,3)  #大于1小于3的小数

    2)随机整数

      print(random.randint(1,10)) # 返回大于等于1且小于等于10的整数
      print(random.randrange(1,10,2)) # 返回大于等于1且小于10的奇数

    3)随机取值

      print(random.choice([1,2,[12,34],'a'])) # 随机返回列表或元组中一个元素
      print(random.sample([1,2,[12,34],'a'],2)) # 随机返回列表或元组中参数设置的个元素

    4)‘洗牌’

      li = [1,2,3,4,5]
      random.shuffle(li) # 打乱列表顺序
      print(li)

  3.time

    

    # print(time.time())
    # print(time.sleep(1))
    # 1526956073.6129677 时间戳 —— 机器计算
    # 以秒为单位的 浮点型
    # 1970 1 1 0 0 0 —— 伦敦的时间
    # 1970 1 1 8 0 0 —— 北京的时间

    1、几种时间格式之间的转换。

    2 .计算时间差

    

    

def sub_time(ftime1,ftime2,time_format='%Y-%m-%d %H:%M:%S'):
stamp_time1 = time.mktime(time.strptime(ftime1, time_format))
stamp_time2 = time.mktime(time.strptime(ftime2, time_format))
sub_stamp_time = stamp_time2-stamp_time1
sub_struct_time = time.gmtime(sub_stamp_time)
return '时间相差%s年%s月%s日%s小时%s分钟%s秒' % (
sub_struct_time.tm_year - 1970,
sub_struct_time.tm_mon - 1,
sub_struct_time.tm_mday - 1,
sub_struct_time.tm_hour,
sub_struct_time.tm_min,
sub_struct_time.tm_min
) print(sub_time('2018-05-21 09:34:00','2018-05-22 08:34:00'))

  4.os

 与操作系统相关的OS:

1)、与工作路径相关的

os.getcwd() #当前执行的工作路径

os.chdir() # 更改当前执行的工作路径

        os.curdir() # 返回当前目录   # .

os.pardir() # 返回当前目前的父目录  # .

        

        

import os
print(os.getcwd())
os.chdir('D:\Python\Projects\py笔记')
print(os.getcwd())
'''D:\Python\Projects\py笔记\day17
D:\Python\Projects\py笔记'''

2)、和操作文件文件夹相关的

# os.listdir('dirname')  # 以列表形式返回指定目录下的子文件夹,文件,隐藏文件名。

      #os.mkdirs('dirname\d') # 递归创建文件夹

#os.mkdir('dirname') #生成单级目录

      #os.removedirs('dirname') # 若目录为空,则删除,并递归至上一级目录,如为空,则删除,以次类推。

      #os.rmdir('dirname')  #删除单级空目录,若目录不为空则无法删除,报错。

      #os.remove('dirname') # 删除一个文件

      #os.rename('dirname') # 重命名文件/目录

      #os.stat('')  获取文件/目录信息

      3)、和操作系统差异相关的。

      #os.sep  输出操作系统特定的路径分隔符,win下为‘\\’,linux为‘/’

      #os.linesep 输出当前平台使用的行终止符 ,win下为‘\t\n’,linux为‘\n’

      #os.pathsep 输出用于分割文件路径的字符串,win下为‘;’,linux为‘:’

      #os.name 输出字符串指示当前使用的平台。win-》‘nt’ ;Linux-》‘posix’

      4)、和执行操作系统命令相关的

      #os.system('bash command') 运行shell命令,直接显示

#os.popen('bash command').read() 运行shell命令,获取执行结果。

      #os.environ 获取系统变量

      5)、os.path

       #os.path.abspath(path)   返回path规范化的绝对路径

      #os.path.split(path)   将path分割成目录和文件名二元组返回

      #os.path.isabs(path)  如果是path是绝对路径,返回True 否则返回False

      #os.path.isfdir(path)      如果path是一个存在的目录,返回True 否则返回False

      #os.path.isfile(path)      如果path是一个存在的文件,返回True 否则返回False

      #os.path.exists(path)   如果path存在,返回True 否则返回False

      #os.path.join(path1[,path2[,....]]) 将多个路径组合返回,第一个绝对路径之前的参数将被忽略

      #os.path.getatime(path)   返回path所指向的文件或目录的最后访问时间

      #os.path.getmtime(path)       返回path所指向的文件或目录的最后修改时间

      #os.path.getsize(path)          返回path大小,如果是文件夹返回大小不准确,全部为4096,如果是文件,则返回的是真实大小。

      

stat 结构:

st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

os.stat 获取文件或目录信息 说明

  5.sys

    sys模块是与python解释器交互的一个接口:

    sys.argv 命令含参数List,第一个元素是程序本身的路径

    sys.path  返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值。

    sys.exit(n)  退出程序,正常退出时exit(0),错误退出sys.exit(1)

    sys.version 获取Python解释程序的版本信息。

    sys.platform 返回操作系统平台的名称

  6.序列化模块json、pickle、shelve
    什么叫序列化,将原本的列表、字典等内容转换成字符串,就叫做序列化。

    1.数据存储,2网络传输,3,可维护

    1)、json

      数字

        字符

      列表(元组会转换成列表后序列化,反序列化后是列表)

      字典(key值必须是str,否则不能被序列化)

这四种类型可以被序列化,其他的都不行,被json序列化后,与其他语言通用。

json.dumps()/json.loads() 在内存中转换

     json.dump()/json.load() 在文件和内存之间转换

2)、json的问题

      1.有限的数据类型

      2.字典的key必须为str

      3.不能连续load

      3)、序列化参数说明

      

Serialize obj to a JSON formatted str.(字符串表示的json对象)
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。)
If check_circular is false, then the circular reference check for container types will be skipped and a circular reference will result in an OverflowError (or worse).
If allow_nan is false, then it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification, instead of using the JavaScript equivalents (NaN, Infinity, -Infinity).
indent:应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,否则会换行且按照indent的数值显示前面的空白分行显示,这样打印出来的json数据也叫pretty-printed json
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
default(obj) is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError.
sort_keys:将数据根据keys的值进行排序。
To use a custom JSONEncoder subclass (e.g. one that overrides the .default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.

参数说明

    import json
    data = {'username':['李华','二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,skipkeys=False,ensure_ascii=False,indent=4,sort_keys=True,separators=(',',':'))
    print(json_dic2)

3)、pickle

import pickle
data = {'username':['李华','二愣子'],'sex':'male','age':16}
with open('pickle','wb') as f:
pickle.dump(data, f)
pickle.dump(data, f)
pickle.dump(data, f) with open('pickle','rb') as f:
while True:
try:
print(pickle.load(f))
except:
break

pickle例子

     4)、shelve

  

import shelve
f = shelve.open('shelve')
f['key1'] = {'k1':1,2:'k2'}
f.close() f = shelve.open('shelve')
print(f['key1'])
f.close()

    

3.当日作业

4.预习和扩展

  

  

python全栈开发day17-常用模块collections,random,time,os,sys,序列化(json pickle shelve)的更多相关文章

  1. Python 全栈开发六 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve configparser hashlib 一. ...

  2. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  3. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  4. python全栈开发day22-常用模块二(hashlib、configparse、logging)

    一.昨日内容回顾 1.钻石继承 #新式类,本身或父类显示继承object #找名字的时候是广度优先顺序 #有mro方法,super方法, # super并不是单纯的找父类,和mro顺序是完全对应的 # ...

  5. Python全栈开发-Day5-常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil shelve xml处理 pyyaml处理 configparser hashlib re正则 ...

  6. Python全栈之路----常用模块----软件开发目录规范

    目录基本内容 log  #日志目录 conf  #配置目录 core/luffycity  #程序核心代码目录  #luffycity 是项目名,建议用小写 libs/modules  #内置模块 d ...

  7. Python 全栈开发九 日志模块

    日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...

  8. Python全栈之路----常用模块----re 模块

    正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是 re. re的匹配语法有以下几种 re.match 从头开始匹配 re.search 匹配包含 re.fin ...

  9. Python全栈之路----常用模块----logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

随机推荐

  1. 25. Spring Boot与缓存 JSR-107、Spring缓存抽象

    JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和Expiry. CachingProvider  ...

  2. codeforces724G Xor-matic Number of the Graph

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  3. android app与服务器交互

    package mydemo.mycom.demo2.service; import org.apache.http.HttpResponse; import org.apache.http.Name ...

  4. Mongodb 副本集

    mongodb主从模式就是一个 单副本的应用:没有很好的扩展性和容错性: 副本集的多个副本保证了容错性:主服务器负责整个副本集的读写,副本集定时同步数据:主节点挂掉:副本集会自动选举一个主的服务器: ...

  5. Java EE 之Hibernate异常总结【1】org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    字面意义就是不能被初始化. 简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调 ...

  6. Maven打包编译找不到com.sun.crypto.provider.SunJCE类

    Maven配置 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>mav ...

  7. Linux文件系统2---VFS的四个主要对象

    1.引言 本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理. Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色. Linux文 ...

  8. div里 datapicker显示异常的情况之一

    现象:datepicker控价显示一半 因为Div高度太小所以设置一个最小高度min-height这样就可以让时间控价显示完整了.

  9. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...

  10. Qt5 json 数据处理

    QT4中使用第三方库QJson解析JSON文件. QT5新增加了处理JSON的类,类均以QJson开头,包含在QtCore模块中. 用到的头文件 #include <QJsonArray> ...