一.collection 模块

python拥有一些内置的数据类型,比如 str,list.tuple.dict.set等

collection模块在这些内置的数据类型的基础上,提供了额外的数据类型:

  • namedtuple 具名元组 :
    •   生成可以使用名字来访问元素内容的元组
  • deque 双端队列:
    •   可以快速的从另外一侧追加和退出对象
  • Counter 计数器:
    •   主要用来计数
  • OrderedDict 有序字典:

    •   按照键值对插入的顺序排序,不是key本身的顺序
  • defaultdict 带有默认值的字典
    • 当我使用普通的字典时,用法一般是dict={},添加元素的只需要
      dict[key] =value,调用的时候也是如此,dict[key],
      但前提是key在字典里,如果不在字典里就会报错 这时defaultdict就能排上用场了,defaultdict的作用是在于,
      当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值, defaultdict可以跟参数,参数可以是list、set、str,boor等等,
      作用是当key不存在时,返回的是参数的默认值,
      比如:
      list对应[ ],
      str对应的是空字符串,
      set对应set( ),
      int对应0
      boor对应False

1.namedtuple

# 想表示坐标点 x = 1, y = 2 的坐标 point
# 普通元组表示
point = (1,2)
print(point) # >>> (1,2) 无法辨别这是一个坐标点 """namedtuple 方法可以给元组命名"""
from collections import namedtuple point = namedtuple('坐标',['x','y','z']) # 第二个参数可以是可迭代带对象
# point = namedtuple('坐标','x y z') # 第二个参数也可以是字符串,但字符串之间要用空格隔开
p = point(5,2,1) # 注意: 传入的实参必须以定义是需要的参数个数相同
print(p) # >>> 坐标(x=5, y=2, z=1)
# print(point(5,2,1))
print(p.x) # >>> 5
print(p.y) # >>> 2
print(p.z) # >>> 1
# 可以单独打印出 传入是实参 # 例 定义扑克牌花色和大小
card = namedtuple('扑克牌','color number')
# card = namedtuple('扑克牌',['color','number'])
A = card('黑桃','A')
print(A) # >>> 扑克牌(color='黑桃', number='A')
print(A.color) # >>> 黑
print(A.number) # >>> A

2.deque

import queue
q = queue.Queue() # 生成队列对象
# put()方法 向队列中添加值,先加入的在前面
# get()方法 从队列中取值,从第一个开始取
q.put('one')
q.put('two')
q.put('three') print(q.get()) # >>> one
print(q.get()) # >>> two
print(q.get()) # >>> three print(q.get()) # 如果值取完了,程序会在原地等待,直到拿到值 '''双端队列''' from collections import deque
q = deque(['w','a','l'])
# wo = deque(('w','a','l'))
'''
append 在尾部添加
appendlift 在头部添加 pop 从尾部弹出
poplift 从头部弹出
'''
q.append(1)
q.appendleft(9)
print(q) # >>> deque([9, 'w', 'a', 'l', 1]) print(q.pop()) # >>> 1
print(q.popleft()) # >>> 9
print(q) # deque(['w', 'a', 'l'])

3.OrderedDict

d = dict([('a',1),('b',2),('c',3)])
print(d) # 字典的key是无序的
# print({i for i in d}) '''OrderedDict有序字典''' from collections import OrderedDict
oredr_d = OrderedDict([('a',1),('b',2),('c',3)])
print(oredr_d) # >>> OrderedDict([('a', 1), ('b', 2), ('c', 3)])
order = OrderedDict()
order['x'] = 1
order['z'] = 2
order['y'] = 3
print(order) # >>> OrderedDict([('x', 1), ('z', 2), ('y', 3)])
# print({i for i in order}) # >>> {'z', 'x', 'y'}
for i in order:
print(i) # 按key在字典中的顺序取出

4.defaultdict

from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
d = defaultdict(list) # 默认后续字典中key对应的value是列表
for i in values:
if i > 66:
d['key1'].append(i)
else:
d['key2'].append(i)
print(d)
# defaultdict(<class 'list'>, {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99, 90]}) my_dict1 = defaultdict(int)
print(my_dict1['xxx'])
print(my_dict1['yyy'])
# 值不存在 返回 int 的默认值 0 my_dict2 = defaultdict(bool)
print(my_dict2['kkk'])
# 值不存在 返回 bool 的默认值 False my_dict3 = defaultdict(tuple)
print(my_dict3['mmm'])
# 值不存在 返回 tuple 对应的默认值 () 空元组 my_dict4 = defaultdict(list)
print(my_dict3['www'])
# 值不存在 返回 list 对应的默认值 [] 空列表

5.Counter

# 统计:
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
result = {}
for color in colors:
if result.get(color)==None:
result[color]=1
else:
result[color]+=1
print (result)
# >>> {'red': 2, 'blue': 3, 'green': 1} from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
c = Counter(colors)
print(c) # >>> Counter({'blue': 3, 'red': 2, 'green': 1})
print (dict(c)) # >>> {'red': 2, 'blue': 3, 'green': 1}

二.时间模块

  • import time
  •   time.time() 用于返回当前时间的时间戳(从1970年1月1日00时00分00秒到现在的浮点秒数)
  •   time.sleep(n) 让程序睡眠 n 秒
  •   time.strftime() 时间样式
  •         time.localtime() 格式化时间戳为本地时间
  • import datetime
  •         datetime.date.tody()  当前年月日
  •   datetime.datetime.today() 当前年月日时分秒

(******)

日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
print(time.strftime('%Y-%m-%d'))
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(time.strftime('%Y-%m-%d %X')) # %X等价于%H:%M:%S
print(time.strftime('%H:%M'))
print(time.strftime('%Y/%m')) print(time.localtime()) print(time.localtime(time.time()))
res = time.localtime(time.time())
# print(time.time())
print(time.mktime(res))
print(time.strftime('%Y-%m',time.localtime()))
print(time.strptime(time.strftime('%Y-%m',time.localtime()),'%Y-%m'))
print(datetime.date.today())  # date>>>:年月日
print(datetime.datetime.today()) # datetime>>>:年月日 时分秒
res = datetime.date.today()
res1 = datetime.datetime.today()
print(res.year)
print(res.month)
print(res.day)
print(res.weekday()) # 0-6表示星期 0表示周一 print(res.isoweekday()) # 1-7表示星期 7就是周日
current_time = datetime.date.today()  # 日期对象
timetel_t = datetime.timedelta(days=7) # timedelta对象
res1 = current_time+timetel_t # 日期对象 print(current_time - timetel_t)
print(res1-current_time) # 小练习 计算今天距离今年过生日还有多少天
birth = datetime.datetime(2019,12,21,8,8,8)
current_time = datetime.datetime.today()
print(birth-current_time) # UTC时间
dt_today = datetime.datetime.today()
dt_now = datetime.datetime.now()
dt_utcnow = datetime.datetime.utcnow()
print(dt_utcnow,dt_now,dt_today)

三.random随机模块

random.random()

  随机 0-1 之间的小数

random.randint()

  随机整数

random.choice()

  随机从可迭代对象中去一个数

random.shuffle()

  洗牌,打乱

print(random.random())  # 随机 0-1 之间的小数
print(random.randint(1,7)) # 随机 1-7 之间的整数,包含收尾
print(random.choice([1,2,3,4,5])) # 随机从列表中取一个数
print(random.choice((1,2,3,5,6,7))) # choice 的参数 需是可迭代对象
res = [1,5,2,7,9,6]
random.shuffle(res) # 洗牌,打乱
print(res)
up_res = chr(random.randint(65,90)) # 按ASCII码表随机取一个大写字母
print(up_res)
low_res = chr(random.randint(97,122)) # 按ASCII码表随机取一个小写字母
print(low_res)
# 生成随机验证码

"""
大写字母 小写字母 数字
5位数的随机验证码
chr
random.choice
封装成一个函数,用户想生成几位就生成几位
"""
def get_code(n):
code = ''
for i in range(n):
# 先生成随机的大写字母 小写字母 数字
upper_str = chr(random.randint(65,90))
lower_str = chr(random.randint(97,122))
random_int = str(random.randint(0,9))
# 从上面三个中随机选择一个作为随机验证码的某一位
code += random.choice([upper_str,lower_str,random_int])
return code
res = get_code(5)
print(res)

四 os模块

  os模块是与操作系统打交道

1 os.listdir()

  以列表的形式返回所指定文件下的所有文件夹和文件

print(os.listdir(r'D:\python视频\day16\代码\day16\老师们的作品'))
# >>> ['tank老师.txt', '冲老师.txt', '明老师.txt', '波老师.txt', '田老师.txt', '苍老师.txt']

2 os.path.dirname(__file__)

  获取当前所在py文件的文件夹路径(绝对路径)

BASE_DIR = os.path.dirname(__file__)
print(BASE_DIR) # >>> D:/python视频/day16/代码/day16

3 os.path.join()

  拼接绝对路径

join_dir = os.path.join(BASE_DIR,'老师们的作品')
print(join_dir) # >>> D:/python视频/day16/代码/day16\老师们的作品

4 os.mkdir()

  自动创建文件夹(在当前py文件的文件夹下创建)

5 os.path.exists()

  判断文件或文件夹 是否在指定的路径下

print(os.path.exists(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品'))  # >>> True
print(os.path.exists(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品\tank老师.txt')) # >>> True

6 os.path.isfile()

  只判断文件夹 是否在指定的路径下

print(os.path.isfile(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品'))  # >>> False
print(os.path.isfile(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品\tank老师.txt')) # >>> True

 7 os.path.rmdir()

  删除指定路径的文件夹 只删除空文件

os.rmdir(r'D:\Python项目\day16\老师们的作品')  # 只能删空文件夹

 8 os.getcwd()

  打印当前py文件所在的文件夹路径,与 dirname 相同

print(os.getcwd())# 打印当前py文件所在的文件夹路径
# >>> D:\python脱产10期视频\day16\代码\day16

9 os.chdir()

  切换到指定的文件夹路径

print(os.chdir(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品'))  # 切换到指定的文件夹路径
print(os.getcwd()) # 与 chdir 和用,打印出所切换到的文件夹路径
# >>> D:\python视频\day16\代码\day16\老师们的作品

10 os.path.getsize()

  获取文件大小(字节数)

print(os.path.getsize(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品\tank老师.txt'))  # 字节大小(个数)
with open(r'D:\python脱产10期视频\day16\代码\day16\老师们的作品\tank老师.txt',encoding='utf-8') as f:
print(len(f.read())) # 字符个数

五.sys模块

  sys模块是与python解释器打交道

1 sys.path.append() 

  将某个路径添加到系统环境变量中

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# print(BASE_DIR)
sys.path.append(BASE_DIR)

 2 sys.platform

  电脑的系统配置

3 sys.version

  python 解释器版本

 4 sys.argv

  获取当前py文件的绝对路径,且以list形式返回

print(sys.argv)  # 命令行启动文件 可以做身份的验证
# ['D:/python脱产10期视频/day16/代码/day16/06 sys模块.py']

六.序列化模块

序列化:其他数据类型转成字符串的过程
反序列化:字符串转成其他数据类型

写入文件的数据必须是字符串,基于网络传输必须是二进制

1 json模块

  只支持的数据类型:

    字符串 列表 字典 整形 元组(转成列表) 布尔值

  优点:所有的语言都支持json格式

  缺点:支持的数据类型很少

dumps:序列化 将其他数据类型转成json格式的字符串
loads:反序列化 将json格式的字符串转换成其他数据类型
res = json.dumps(d)  # json格式的字符串 必须是双引号 >>>: '{"name": "jason"}'
print(res,type(res)) # >>> {"name": "jason"} <class 'str'>
res1 = json.loads(res) # 将 json 字符串格式的字典转成 字典
print(res1,type(res1)) # >>> {'name': 'jason'} <class 'dict'>
dump 针对文件操作 把字典转成json字符串并写入到文件
load 针对文件操作 把文件中以json字符串形式存的内容反序列化读出来
d = {"name":"json"} # 字典
with open('userinfo','w',encoding='utf-8') as f:
json.dump(d,f) # 转字符串形式的字典并自动写入文件 {"name": "json"} <class 'str'>
with open('userinfo','r',encoding='utf-8') as f:
res = json.load(f) # {'name': 'json'}<class 'dict'>
print(res,type(res))

2 pickle模块

  缺点:只支持python

  优点:python的所有的数据类型都支持

dumps 将数据序列化成二进制格式 ()可解码符内容)

loads 反序列化

d = {'name':'json'}
res = pickle.dumps(d) # 将对象直接转成二进制
print(pickle.dumps(d))
res1 = pickle.loads(res)
print(res1,type(res1))

dump 针对文件操作 把数据序列化成二进制并写入到文件

load 针对文件操作 把文件中以pickle形式存的二进制内容反序列化读出来

  用pickle操作文件的时候 文件的打开模式必须是b模式

with open('userinfo_1','wb') as f:
pickle.dump(d,f) with open('userinfo_1','rb') as f:
res = pickle.load(f)
print(res,type(res))

七.subprocess子进程

1.用户通过网络连接上了你的这台电脑
2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
3.获取用户命令 里面subprocess执行该用户命令
4.将执行结果再基于网络发送给用户
这样就实现 用户远程操作你这台电脑的操作
while True:
cmd = input('cmd>>>:').strip()
import subprocess
obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# print(obj)
print('正确命令返回的结果stdout',obj.stdout.read().decode('gbk'))
print('错误命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))

collection,random,os,sys,序列化模块的更多相关文章

  1. 2019-7-18 collections,time,random,os,sys,序列化模块(json和pickle)应用

    一.collections模块 1.具名元组:namedtuple(生成可以使用名字来访问元素的tuple) 表示坐标点x为1  y为2的坐标 注意:第二个参数可以传可迭代对象,也可以传字符串,但是字 ...

  2. 7.18 collection time random os sys 序列化 subprocess 等模块

    collection模块 namedtuple 具名元组(重要) 应用场景1 # 具名元组 # 想表示坐标点x为1 y为2 z为5的坐标 from collections import namedtu ...

  3. python time,random,os,sys,序列化模块

    一.time模块 表示时间的三种方式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳 ...

  4. time,random,os,sys,序列化模块

    一.time模块 表示时间的三种方式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳 ...

  5. 常用模块random,time,os,sys,序列化模块

    一丶random模块 取随机数的模块 #导入random模块 import random #取随机小数: r = random.random() #取大于零且小于一之间的小数 print(r) #0. ...

  6. python之模块random,time,os,sys,序列化模块(json,pickle),collection

    引入:什么是模块:   一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类型. 1.使用python编写的代码(.py ...

  7. python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块

    time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...

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

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

  9. 模块random+os+sys+json+subprocess

    模块random+os+sys+json+subprocess 1. random 模块   (产生一个随机值) import random 1 # 随机小数 2 print(random.rando ...

随机推荐

  1. Meerkat软件

    一.准备工作 meerkat 0.189版本和以前的版本相比,支持bwa mem 输出的bam文件,还支持全外显子数据count SV. meerkat原理 1.1 需要准备的软件 unix/Linu ...

  2. circRNA数据库的建立

      circRNA数据库的建立 wget http://circbase.org/download/human_hg19_circRNAs_putative_spliced_sequence.fa.g ...

  3. .NET Core 配置文件

    老一代配置系统 1,XML格式 格式单一. 2,配置信息Kye,只能一维化配置 3,框架信息和应用程序信息混合到一起 应用程序中是 App.config web项目中           web.co ...

  4. SQLServer分页查询方法整理以及批量插入操作SqlBulkCopy

    分页查询 通用方法:sqlserver 2005 + ROW_NUMBER() OVER()方式: ; TOP NOT IN方式 : ID FROM TripDetail ORDER BY ID) O ...

  5. zblog安装环境介绍?zblog安装需要什么环境

    最近在群里看到很的多人有在问:“安装zblog需要什么环境?”,其实这个问题在zblog官网的程序下载页面有说明,但是不太详细,那么本文的目的就是来给大家介绍下zblog安装环境详细说明. zblog ...

  6. ILSVRC比赛带来的算法

    李飞飞和它的团队搜集了ImageNet一个超过15 million的图像数据集,大约有22,000类.这个文件集合对深度卷积网络极大地推进深度学习各领域的发展. ILSVRC是对ImageNet进行分 ...

  7. 最简容器动手小实践——FC坦克大战游戏容器化

    FC 经典力作相信大家一点也不陌生.童年时期最频繁的操作莫过于跳关,在 果断跳到最后一关之后,一般都是以惨败告终,所以还是一关一关的过原始积累才能笑到最后.这款游戏的经典就在于双人配合,守家吃装备.也 ...

  8. 织梦安全防护:禁止uploads、data、templets执行脚本

    下面介绍下如何针对uploads.data.templets做PHP脚本限制:对uploads.data.templets 三个目录做执行php脚本限制,就算被上传了木马文件到这些文件夹,也是无法运行 ...

  9. VMWare打开centos,提示内部错误

    如题,VMWare打开centos,提示内部错误.该原因是因为服务被停止了之后没有将其启动,将其启动就解决了. CMD客户端输入命令 services.msc 将关于VM的服务启动就可以了

  10. nodejs中使用mongodb

    /** * 使用mongodb存储数据 * 1 首先安装mongodb nodejs插件 npm install mongodb --save-dev * 2 安装express (非必须) * * ...