一、引入模块的方式:

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, '', [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. 对每⼀⾏分别进⾏处理.

 import json
lst = [{"a": 1}, {"b": 2}, {"c": 3}]
# 写⼊
f = open("test.json", mode="w", encoding="utf-8")
for el in lst:
s = json.dumps(el, ensure_ascii=True) + "\n"
f.write(s)
f.close() # 读取
f = open("test.json", mode="r", encoding="utf-8")
for line in f:
dic = json.loads(line.strip())
print(dic)
f.close()

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

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

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

day22 模块-collections,time,random,pickle,shelve等的更多相关文章

  1. day19:常用模块(collections,time,random,os,sys)

    1,正则复习,re.S,这个在用的最多,re.M多行模式,这个主要改变^和$的行为,每一行都是新串开头,每个回车都是结尾.re.L 在Windows和linux里面对一些特殊字符有不一样的识别,re. ...

  2. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  3. Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)

    由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过, ...

  4. python常用模块collections os random sys

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...

  5. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  6. 常用模块(random,os,json,pickle,shelve)

    常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...

  7. Python 序列化模块(json,pickle,shelve)

    json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集. 常用方法 ...

  8. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  9. Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块

    json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...

随机推荐

  1. CF613D:Kingdom and its Cities(树形DP,虚树)

    Description 一个王国有n座城市,城市之间由n-1条道路相连,形成一个树结构,国王决定将一些城市设为重要城市. 这个国家有的时候会遭受外敌入侵,重要城市由于加强了防护,一定不会被占领.而非重 ...

  2. 64. [Mcoi2018]终末之诗(上)

    Description 求出\(k^{k^{k^{k^{...}}}} \pmod p\) 的结果 扩展欧拉定理:\[a^x=a^{min(x,x\%\varphi(p)+\varphi(p))}(m ...

  3. 在不升级 mysql 的情况下直接使用 mysql utf8 存储 超过三个字节的 emoji 表情

    由于现在数据库的版本是5.5.2,但是看网上说要直接存储emoji表情,需要升级到5.5.3然后把字符集设置为utf8mb4,但是升级数据库感觉属于敏感操作. 考虑了多久之后直接考虑使用正则来替换,但 ...

  4. TensorFlow入门:线性回归

    随机.mini-batch.batch(见最后解释) 在每个 epoch 送入单个数据点.这被称为随机梯度下降(stochastic gradient descent).我们也可以在每个 epoch ...

  5. 404 Note Found队Beta3

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  6. 使用Navicat for Oracle工具连接oracle

    使用Navicat for Oracle工具连接oracle的 这是一款oracle的客户端的图形化管理和开发工具,对于许多的数据库都有支持.之前用过 Navicat for sqlserver,感觉 ...

  7. MapReduce操作Hbase --table2file

    官方手册:http://hbase.apache.org/book.html#mapreduce.example 简单的操作,将hbase表中的数据写入到文件中. RunJob 源码: import ...

  8. BZOJ4006: [JLOI2015]管道连接(斯坦纳树,状压DP)

    Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1171  Solved: 639[Submit][Status][Discuss] Descripti ...

  9. 微信小程序页面传多个参数

    在需要页面之间传递多个参数的时候,需要用&链接起来,上一页的正确跳转代码如下: var that = this; wx.navigateTo({ url: '../../pages/myLis ...

  10. 大数据入门第十一天——hive详解(一)入门与安装

    一.基本概念 1.什么是hive The Apache Hive ™ data warehouse software facilitates reading, writing, and managin ...