day22 模块-collections,time,random,pickle…
2018-11-20 03:25:13来源:博客园 阅读 ()
一、引入模块的方式:
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模块主要封装了一些关于集合类的相关操作
- Counter——counter是一个计数器. 主要?用来计数
- 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 = 把对象转化成字典. 需要自己写转换过程
object_hook = 把字典转化成对象. 需要自己写转换过程
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) + "\n" 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)每个节 可以有多个参数(键=值).
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:算法笔记(八):复杂度分析(二)
- python3 enum模块的应用 2019-08-13
- 利用python自动生成verilog模块例化模板 2019-08-13
- Python random模块(以后用到一个再更新一个) 2019-07-24
- xadmin进行全局配置(修改模块名为中文以及其他自定义的操作 2019-07-24
- concurrent.futures模块简单介绍(线程池,进程池) 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash