zoukankan      html  css  js  c++  java
  • day22 模块-collections,time,random,pickle,shelve等

    一、引入模块的方式:

    1. 认识模块
    模块可以认为是一个py文件. 模块实际上是我们的py文件运行后的名称空间
    导入模块:
    1. 判断sys.modules中是否已经导入过该模块
    2. 开辟一个内存
    3. 在这个内存中执行该py文件
    4. 给这个内存起个名字, 一般用的是py文件的名字。返回给导入方
    如果你的py文件是启动文件, 名字是__main__

    程序的入口一般是:
    if __name__ == "__main__":
      pass

    1. import 模块

    import 模块名
    模块名.属性/方法/类

    每个模块都有自己的独立的名称空间,每个都有一个global, 互相并不影响
    模块.属性 = 值. # 不要随意更改模块的值

    2. from xxx import 模块

    from 模块 import 函数/变量
    当作自己的变量或者函数来使用

    from xxx import * 导入所有
    导入的内容都可以起别名 as

    二、collections模块

    collections模块主要封装了一些关于集合类的相关操作

    1. Counter——counter是一个计数器. 主要⽤用来计数
    2. deque 双向队列

    需了解栈和队列

    栈:  FILO. 先进后出  -> 砌墙的砖头, 老师傅做馒头

    队列: FIFO. 先进先出  -> 买火⻋车票排队, 所有排队的场景

    队列: python提供了queue模块. 使用起来非常⽅便

    注意. 如果队列里没有元素了. 再也就拿不出来元素了. 此时程序会阻塞.

    双向队列 collections中的,可以从左侧添加,也可从右侧添加,删除同理

      3.namedtuple 命名元组

    给元组内的元素进行命名

    from collections import namedtuple

    # ⾃⼰定义了一个元组, 如果灵性够好, 这其实就是创建了了⼀个类

    nt = namedtuple("point", ["x", "y"])

    p = nt(1, 2)

    print(p)

    print(p.x)

    print(p.y)

      4.orderdict和defaultdict

    orderdict 顾名思义. 字典的key默认是无序的. 而OrderedDict是有序的

    defaultdict: 可以给字典设置默认值. 当key不存在时. 直接获取默认值:

    from collections import defaultdict

    dd = defaultdict(list)  # 默认值list

    print(dd['娃哈哈']) # [] 当key不存在的时候. 会自动执⾏构造方法中传递的内容.

    三、time模块  时间模块

     1.  时间戳(timestamp). 时间戳使⽤的是从1970年01月01日 00点00分00秒到现在一共经过了了多少秒... 使⽤float来表示

    2.  格式化时间(strftime). 这个时间可以根据我们的需要对时间进⾏任意的格式化.

    1. 获取系统时间 time.time() 时间戳

    2. 格式化时间 strftime() 时间格式: %Y-%m-%d %H:%M:%S       %Y-%m-%d

    3. 结构化时间 time.gmtime() time.localtime()

       strptime() 把格式化时间转化成结构化时间

       mktime()  把结构化时间转化成时间戳

    s = time.strftime("%Y-%m-%d %H:%M:%S")  格式化

    print(s)

    print(time.localtime()) #结构化时间

    结果: time.struct_time(tm_year=2017, tm_mon=05, tm_mday=8, tm_hour=10, tm_min=24, tm_sec=42, tm_wday=0, tm_yday=126, tm_isdst=0)

    所有的转化都要通过结构化时间来转化.

    t = time.localtime(1888888888)  # 结构化时间

    s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化这个时间

    print(s)

    s = "2020-10-01 12:18:12"

    t = time.strptime(s, "%Y-%m-%d %H:%M:%S")   # 转化成结构时间

    print(time.mktime(t))   # 转换成时间戳

    四、random模块 -随机

    1 import random 
    2 print(random.random())  # 0-1⼩小数 
    3 print(random.uniform(3, 10))  # 3-10⼩小数 
    4 print(random.randint(1, 10))  # 1-10整数 
    5 [1, 10] print(random.randrange(1, 10, 2))  # 1-10奇数 
    6 [1,10) print(random.choice([1, '周杰伦', ["盖伦", "胡辣汤"]]))  # 1或者23或者[4,5]) 
    7 print(random.sample([1, '23', [4, 5]], 2))  # 列列表元素任意2个组合 
    8 lst = [1, 2, 3, 4, 5, 6, 7, 8] random.shuffle(lst)  # 随机打乱顺序 
    9 print(lst)

    五、os、sys

    os和sys

    os.sep 文件路径分隔符

    sys.path  python查找模块的路径

    六、序列化

        1. pickle  把一个对象转化成bytes写入到文件

            pickle.dumps() 把对象转换成bytes

            pickle.loads() 把bytes转化成对象

            pickle.dump() 把对象转换成bytes. 写入到文件

            pickle.load() 把文件中的bytes读取. 转化成对象

             那真的要写入或者读取多个内容怎么办? 很简单. 装list里. 然后读取和写入都⽤list

    创建一个Car类 拥有名字,年龄属性

    lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]

    f = open("cat", mode="wb")

    pickle.dump(lst, f)

    f = open("cat", mode="rb")

    ll = pickle.load(f)

    for el in ll:   

    el.catchMouse()

    记住⼀点, pickle序列化的内容是二进制的内容(bytes) 不是给⼈看的,给机器看的。

        2. shelve 小型数据库, redis, mongodb, dict

            当成字典来用

            writeback=True 用来执行修改操作,删除或修改都用它 不用不改变

        3. json 以前用xml  先在用json

            json.dumps() 把字典转换成json字符串

            json.loads() 把json字符串转化成字典

            json.dump() 把字典转换成json字符串. 写入到文件

            json.load() 把文件中的json字符串读取. 转化成字典

            default = func()  把对象转化成字典. 需要自己写函数转换过程

            object_hook = func() 把字典转化成对象. 需要自己写函数转换过程

            ensure_ascii = False  可以处理中文

      注意. 我们可以向同一个文件中写⼊多个json串. 但是读不⾏。

    在读取的时候是⽆法正常读取的. 那如何解决呢? 两套方案. 方案一. 把所有的内容准备好统一 进⾏行写入和读取. 但这样处理, 如果数据量小还好. 数据量大的话, 就不够友好了. 方案二. 不用 dump. 改用dumps和loads. 对每⼀⾏分别进⾏处理.

     1 import json 
     2 lst = [{"a": 1}, {"b": 2}, {"c": 3}] 
     3 # 写⼊
     4 f = open("test.json", mode="w", encoding="utf-8")
     5 for el in lst:    
     6     s = json.dumps(el, ensure_ascii=True) + "
    "    
     7     f.write(s)
     8 f.close() 
     9 
    10 # 读取 
    11 f = open("test.json", mode="r", encoding="utf-8") 
    12 for line in f:   
    13     dic = json.loads(line.strip())    
    14 print(dic)
    15 f.close()

      4.configparser 处理windows配置文件的  dict

      适用于配置文件的格式与windows ini文件类似

      可以包含一个或多个节(section)每个节 可以有多个参数(键=值).

  • 相关阅读:
    【deep learning精华部分】稀疏自编码提取高阶特征、多层微调完全解释及代码逐行详解
    【machine learning通俗讲解code逐行注释】之线性回归实现
    softmax实现(程序逐句讲解)
    softmax回归(理论部分解释)
    AtomicInteger小小的理解
    jdk8新特性之lambda expressions
    i++ 与 ++i 的从字节码层面看二者的区别
    jdk8永久代从方法区移除的验证
    复杂事件处理引擎—Esper 处理模型
    复杂事件处理引擎—Esper参考(事件部分)
  • 原文地址:https://www.cnblogs.com/honghong7725/p/9974914.html
Copyright © 2011-2022 走看看