1. collections模块
collections模块主要封装了⼀些关于集合类的相关操作. 比如, 我们学过的Iterable,
Iterator等等. 除了这些以外, collections还提供了⼀些除了基本数据类型以外的数据集合类
型. Counter, deque, OrderedDict, defaultdict以及namedtuple
class Animal:
pass from collections import Iterable, Iterator
lst = []
print(isinstance(lst, Iterable)) # True
print(isinstance(lst, Iterator)) # False
# 计算字符串中每个字符出现的次数
s = "abcdefadsfasfasdfbadsfasdbfdasfdas" # 可迭代
dic = {}
for c in s:
dic[c] = dic.get(c, 0) + 1
print(dic) from collections import Counter # 引入模块, 计数器
c = Counter(s) # 和字典差不多
print(c)
from collections import Counter 

lst = ["周杰伦", '周杰伦', "王力宏", "大阳哥", "大阳哥", "刘伟", "刘伟"]
c = Counter(lst)
print(c) # 建一个Counter对象 print(c['s']) # 用起来和字典一样

Counter

# deque 双向队列

from collections import deque
d = deque() # 创建双向队列, 左右都能添加删除的列表
d.append("李茶的姑妈") # 默认在右侧添加
d.append("无双")
d.append("影")
d.append("找到你")
#让悲伤逆流成河, 理查的姑妈, 无双, 影, 找到你
print(d)
d.appendleft("让悲伤逆流成河") # 左侧添加
print(d) #
print(d.pop()) # 从右边删除
print(d.pop()) # 从右边删除
print(d.popleft()) # 从左边删除
print(d.pop()) # 从右边删除
print(d)
# namedtuple 命名元组

from collections import namedtuple

po = namedtuple("Point", ["x", "y"])    # 定义了简单的类-lambda
p = po(1, 2) # 命名元组
print(p)  # Point(x=1, y=2) # 效果等同于
class Point:
def __init__(self, x, y):
self.x = x
self.y = y p = Point(1, 2)  
# OrderedDict
# 旧算法中字典是无序的.在py3.6以上使用的是新算法. 来自于pypy. 节约20-30%内存
d = {"a": 1, "b": 2, "c": 3}
print(d) from collections import OrderedDict
od = OrderedDict({"a" : 1, "b": 2, "c": 3})
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od.get("b"))
print(od["b"]) # 和字典一样用
# defaultdict
from collections import defaultdict
d = defaultdict(list) # {} list() 必须是callable
d['刘伟'] = "奥特曼"
print(d['小怪兽']) # 当key不存在的时候. 返回默认值.其实就是callable()
print(d['小哥哥'])
from collections import defaultdict
lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
dic = {}
for el in lst:
if el > 66:
dic.setdefault("key1", []).append(el)
else:
dic.setdefault("key2", []).append(el)
print(dic) lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
dd = defaultdict(list)
for el in lst:
if el > 66:
dd['key1'].append(el)
else:
dd['key2'].append(el)
print(dd)

defaultdict

2. queue队列 stack栈
队列: 先进先出. First In First Out FIFO
栈: 先进后出. First In Last Out FILO
import queue
q = queue.Queue() # 创建队列
q.put("刘伟") # 放入元素
q.put("大阳哥")
q.put("吴佩琪") print(q.get()) # 获取元素
print(q.get())
print(q.get())
print(q.get()) # 阻塞了. 在等下一个元素, input()
# 堆栈
class StackFullError(Exception):
pass class StackEmptyError(Exception):
pass class Stack:
def __init__(self, size):
self.index = 0
self.size = size
self.lst = [] def put(self, el):
if self.index < self.size:
self.lst.insert(self.index, el)
self.index += 1
return self.lst
else:
raise StackFullError('the stack is full!') def pop(self):
if self.index > 0:
self.index -= 1
return self.lst[self.index]
else:
raise StackEmptyError('the stack is empty!') # 使用
# 实例化
# s = Stack(5)
# s.put('馒头1')
# s.put('馒头2')
# s.put('馒头3')
# s.put('馒头4')
# s.put('馒头5')
# # s.put('馒头6') # 报错,堆栈已满
#
# print(s.pop())
# print(s.pop())
# print(s.pop())
# print(s.pop())
# print(s.pop())
# # print(s.pop()) # 报错,堆栈已空 s = Stack(2)
s.put('馒头1') # 放一个,拿一个
print(s.pop())
s.put('馒头2')
print(s.pop())
s.put('馒头3')
print(s.pop())
s.put('馒头4')
print(s.pop())
s.put('馒头5')
print(s.pop())
s.put('馒头6')
print(s.pop())
3. time 时间模块(重点)
自己的模块不要和python的模块冲突(名称不要相同)
# 在这里之前。 很多模块已经导入进内存了。 自己的模块不要和python的模块冲突.
import sys
import builtins
print(sys.path) # 搜索模块的路径, django . flask
print(sys.modules.keys())
sys.path.clear() # 寻找模块的路径给删了. 但是。 内存里的面的模块还在
import json # 这里会报错.
import os

 
import time
print(time.time()) # 当前系统时间 1538970854.5946708 float 时间戳. 给机器用的.数据库有的时候存储的是时间戳
# 以 1970-01-01 00:00:00 原点. 每一秒一个数字. # 时间格式 格式化时间
print(time.strftime("%Y/%m/%d %H:%M:%S")) # 给人看的. # 结构化时间
print(time.localtime()) # 用来计算的. # 18888888888 时间戳 -> 格式化时间
# 把时间戳转化成结构化时间
f = 18888888888
st = time.localtime(f)
print(st)
# # 格式化结构时间
t = time.strftime("%Y/%m/%d %H:%M:%S", st) # f: format 格式化
print(t) # 用户输入了一个时间 2018-09-08 11:22:36 - 存储 时间戳
# 先把格式化时间转化成结构化时间
s = "2018-09-08 11:22:36"
st = time.strptime( s , "%Y-%m-%d %H:%M:%S") # p:parse 转换
t = time.mktime(st) # 转化成时间戳 1536376956
print(t) print(time.asctime())
# sleep()
import time
while 1:
s = time.strftime(%Y-%m-%d %H:%M:%S)
print(s)
time.sleep(1)
⽇期格式化的标准:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m ⽉份(01-12)
%d ⽉内中的⼀天(0-31)
%H 24⼩时制⼩时数(0-23)
%I 12⼩时制⼩时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的⽉份名称
%B 本地完整的⽉份名称
%c 本地相应的⽇期表示和时间表示
%j 年内的⼀天(001-366)
%p 本地A.M.或P.M.的等价符
%U ⼀年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W ⼀年中的星期数(00-53)星期⼀为星期的开始
%x 本地相应的⽇期表示
%X 本地相应的时间表示
%z 当前时区的名称
%% %号本身

4. random
import random

print(random.random()) #  0-1小数
print(random.uniform(1, 3)) # 1-3之间的小数 print(random.randint(1, 36)) # [1,36]随机整数
print(random.randrange(1, 5, 3)) # [1, 5) 步长是3 print(random.choice(["马化腾", ["倚天屠龙记", "天龙八部", "射雕"], "张无忌", "周伯通", "刘伟"])) # 随机选一个
print(random.sample(["鱼香肉丝", "宫保鸡丁", "大猪蹄子", "胡辣汤"], 2)) # 随机选n个
print(random.sample(list(range(1,37)), 7)) # 36选7 lst = [1,2,3,4,5,5,6,7,8,9,]
random.shuffle(lst) # 洗牌
print(lst)
5. os, sys
import os

# 创建多级目录
# os.makedirs("a/b/c/d/e/f/g")
# os.removedirs("a/b/c/d/e/f/g") # 空目录可以删除. 非空的不能删 os.system("dir") # 执行命令
ret = os.popen("dir").read() # 执行命令返回结果 显示当前目录下的所有文件
print(ret) print(os.getcwd()) # 获取当前目录名 print(os.path.split(r"D:\python学院\s16\第一阶段\day08 文件操作\video")) # 将path分割成⽬录和⽂件名⼆元组返回
print(os.path.exists(r"D:\python学院\s16\第一阶段\day08 文件操作\video12312312312321")) # False 没有这个文件 print(os.name) # nt NT windows平台
import sys
# print(sys.version)
print(sys.path) # 获取系统搜索模块的路径
sys.path.clear() # 应该是没了的. # print(sys.platform) #
print(sys.argv) # 在运行的时候给python传递的信息.
ip = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3] print(ip)
print(username)
print(password)
# 在文件夹中创建文件
import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f: f.close(), l)
print(l) # l列表中的是句柄

os.rmdir()只能删除空文件夹, os.remove()只能删除文件,不能删除文件夹  区分开,不要混淆

所有和操作系统相关的内容都在os模块
os.makedirs('dirname1/dirname2') 可⽣成多层递归⽬录
os.removedirs('dirname1') 若⽬录为空,则删除,并递归到上⼀级⽬录,如若也为空,则删
除,依此类推
os.mkdir('dirname') ⽣成单级⽬录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空⽬录,若⽬录不为空则⽆法删除,报错;相当于shell中
rmdir dirname
os.listdir('dirname') 列出指定⽬录下的所有⽂件和⼦⽬录,包括隐藏⽂件,并以列表⽅式
打印
os.remove() 删除⼀个⽂件
os.rename("oldname","newname") 重命名⽂件/⽬录
os.stat('path/filename') 获取⽂件/⽬录信息
os.system("bash command") 运⾏shell命令,直接显示
os.popen("bash command).read() 运⾏shell命令,获取执⾏结果
os.getcwd() 获取当前⼯作⽬录,即当前python脚本⼯作的⽬录路径
os.chdir("dirname") 改变当前脚本⼯作⽬录;相当于shell下cd
# os.path
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成⽬录和⽂件名⼆元组返回
os.path.dirname(path) 返回path的⽬录。其实就是os.path.split(path)的第⼀个元素
os.path.basename(path) 返回path最后的⽂件名。如何path以/或\结尾,那么就会返回空值。
即os.path.split(path)的第⼆个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是⼀个存在的⽂件,返回True。否则返回False
os.path.isdir(path) 如果path是⼀个存在的⽬录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第⼀个绝对路径之前的参数
将被忽略
os.path.getatime(path) 返回path所指向的⽂件或者⽬录的最后访问时间
os.path.getmtime(path) 返回path所指向的⽂件或者⽬录的最后修改时间
os.path.getsize(path) 返回path的⼤⼩
# 特殊属性:
os.sep 输出操作系统特定的路径分隔符, win下为"\\",Linux下为"/"
os.linesep 输出当前平台使⽤的⾏终⽌符, win下为"\r\n",Linux下为"\n"
os.pathsep 输出⽤于分割⽂件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使⽤平台。 win->'nt'; Linux->'posix'
os.stat() 属性解读:
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)是创建时间(详细信息参⻅平台的⽂档)。
所有和python解释器相关的都在sys模块.
sys.argv 命令⾏参数List,第⼀个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使⽤PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称

Counter补充

# 6、车牌区域划分,给出一下车牌和地点信息对照,请根据车牌信息,分析出各省的车牌持有数量。
# cars = ['鲁A32444', '鲁B12333', '京B8989M', '黑C49678', '黑C46555', '沪B25041', '黑C34567']
# locations = {'沪': '上海', '京': '北京', '黑': '黑龙江', '鲁': '山东', '鄂': '湖北', '湘': '湖南'}
# dic = {}
# lst = []
# for el in cars:
# lst.append(el[0])
#
# for el in lst:
# dic[locations[el]] = dic.get(locations[el], 0) + 1
#
# print(dic) from collections import Counter
cars = ['鲁A32444', '鲁B12333', '京B8989M', '黑C49678', '黑C46555', '沪B25041', '黑C34567']
locations = {'沪': '上海', '京': '北京', '黑': '黑龙江', '鲁': '山东', '鄂': '湖北', '湘': '湖南'}
lst = []
for el in cars:
lst.append(locations[el[0]])
print(Counter(lst))

Day22 常用模块01的更多相关文章

  1. day22 常用模块(上)

    一.时间模块 1 time模块 获取时间的三种格式: 第一种:time.time() 时间戳(timestamp):从1970年到现在的秒数 #应用场景:计算时间差 可以对时间加减,返回值为浮点型 p ...

  2. python常用模块-01

    1. 简单了解模块 写的每一个py文件都是一个模块. 还有一些我们一直在使用的模块 buildins 内置模块. print, input random 主要是和随机相关的内容 random()    ...

  3. 进击的Python【第五章】:Python的高级应用(二)常用模块

    Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...

  4. python学习笔记之常用模块(第五天)

    参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...

  5. day--6_python常用模块

    常用模块: time和datetime shutil模块 radom string shelve模块 xml处理 configparser处理 hashlib subprocess logging模块 ...

  6. Tengine 常用模块使用介绍

    Tengine 和 Nginx Tengine简介 从2011年12月开始:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能 和特性. ...

  7. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  8. Day05 - Python 常用模块

    1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...

  9. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

随机推荐

  1. 使用mysqlbinlog恢复数据

    前提:mysql数据库开启了binlog日志,并且有对应的日志文件 起因:今天由于同事对数据库的误操作不小心删除了一条数据 方法一:通过binlog日志文件恢复数据 通过mysqlbinlog恢复My ...

  2. WEX5中ajax跨域访问的几种方式

    1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...

  3. 四、docker compose

    docker compose可以方便我们快捷高效地管理容器的启动.停止以及重启等操作,和批量管理容器,它类似于linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什 ...

  4. LodopJS代码模版的加载和赋值

    Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍JS模版的加载和赋值.两种模版都可以存入一下地方进行调用,比 ...

  5. Java调用.NET 的Web Service服务故障排除

    参考路径:http://blog.sina.com.cn/s/blog_4c925dca01014y3r.html

  6. DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

    本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 ModbusFunction 类图如下: 如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction, ...

  7. 【SSL】OV、DV和EV证书的区别

    关于https证书 https协议需要到ca申请证书,一般免费证书很少,需要交费. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议. http和https使用 ...

  8. 进程间通信IPC与Binder机制原理

    1, Intent隐式意图携带数据 2, AIDL(Binder) 3, 广播BroadCast 4, 内容提供者ContentProvider 5,Messager(内部通过binder实现) 6, ...

  9. P1495 曹冲养猪

    原题链接 https://www.luogu.org/problemnew/show/P1495 这个题明显的中国剩余定理(孙子定理),如果有不懂孙子定理的点这个链接https://baike.bai ...

  10. SpringMVC 集成Log4j

    项目地址:https://github.com/xiaoqiu-duan/DataProject.git 1.添加jar <dependency> <groupId>org.s ...