Python进阶-XI 常用模块之一:collections、time、random、os、sys
简要介绍一下各种集合:
列表、元组、字典、集合(含frozenset)、字符串、堆栈(如手枪弹夹:先进后出)、队列(如马克沁机枪的弹夹:先进先出)
1、collections
1)queue 队列介绍
如马克沁机枪的弹夹:先进先出,还如排队买票,先排的先买!
import queue
q = queue.Queue()
q.put([1, 2, 3])
q.put(4)
q.put(5)
print(q) # 队列是一个黑盒子,你看不到里面放着什么!
q.get() # 得到[1, 2, 3]
q.get() # 得到4
print(q.get()) #打印:5
q.get() # 停在这,除非有新的元素加入,否则一直停在这等待! --程序阻塞
2)命名元组
from collections import namedtuple
Point = namedtuple('point',['x', 'y', 'z'])
p1 = Point(22,11,33)
p2 = Point(2,11,2)
p3 = Point(5,2,5)
print(p1.x)
print(p3.z)
print(p1,p2,p3) #扑克牌中的花色和数字
Card = namedtuple('card', ['suits', 'num'])
c1 = Card('红桃', 'K')
c2 = Card('方块', 7)
c3 = Card('梅花', 2)
print(c1, c2)
print(c2.num)
3)deque双端队列 可从队列的两端操作,比队列快!
rom collections import deque
dq = deque([1,2])
dq.append('a') # 从后面放数据 [1,2,'a']
dq.appendleft('b') # 从前面放数据 ['b',1,2,'a']
dq.insert(2,3) #['b',1,3,2,'a']
print(dq.pop()) # 从后面取数据 a
print(dq.pop()) # 从后面取数据 2
print(dq.popleft()) # 从前面取数据 b
print(dq) # deque([1, 3])
4)有序字典 OrderedDict
from collections import OrderedDict
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的
print(od['a'])
for k in od:
print(k)
5)默认字典
众所周知,在Python中如果访问字典中不存在的键,
会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined)。
但是有时候,字典中的每个键都存在默认值是非常方便的。
from collections import defaultdict d = defaultdict(lambda : 5)
print(d['k']) # 不存在该key,所以返回默认的5 dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] = 'two'
print(dict1[1]) #
print(dict2[1]) # set()
print(dict3[1]) # ''
print(dict4[1]) # []
2、time模块
时间的三种表达方式
1)时间戳 —— float时间 : 计算机看的 t = time.time()
2)格式化时间 —— 字符串: 给人看的
#strftime
print(time.strftime("%Y-%m-%d %a %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%Y/%m/%d %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%m-%d %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M")) #year month day HOUR MINUTE SECOND
3)结构化时间 —— 元祖 :计算用的
truct_time = time.localtime()
print(struct_time)
print(struct_time.tm_year)
4) 时间戳和结构化时间 各种转换
# (1)时间戳转结构化
print(t)
print(time.localtime(3000000000))
print(time.gmtime(t))
# (2)结构化转时间戳
print(time.mktime(time.localtime()))
# (3)格式化转结构化
print(time.strptime('2000-12.31','%Y-%m.%d'))
# (4)时间戳转格式化
print(time.strftime('%m/%d/%Y %H:%M:%S',time.localtime(3000000000)))
print(time.asctime()) #Wed Dec 4 22:09:08 2019
3、random模块
# 1)产生随机整数的三种方法:
print(random.randint(1, 10)) # 随机生成[1,10]之间的整数
print(random.randrange(1, 10, 2)) # 随机生成[1,10)之间的奇数,最后一个参数2是步长 # 2)产生一个随机小数的两种方法:
print(random.random()) # 返回随机生成的一个实数,它在[0,1)范围内。
print(random.uniform(2, 4)) # 返回随机生成的一个实数,它在(2,4)范围内。 # 3)从序列中随机选取一个元素
random.choice([1, '', [4, 5]]) # #1或者23或者[4,5]
print(random.choice('tomorrow')) # 4)随机选择多个返回,返回的个数为函数的第二个参数
random.sample([1, '', [4, 5]], 2) # 列表元素任意2个组合 # 5)打乱列表顺序
item = [1, 3, 5, 7, 9]
random.shuffle(item)
print(item) # 6)综合实例:随机生成验证码
'''分析:
随机生成4个字符,包含A-Za-z0-9
字母考虑用ascii码:,这样都是数字,好随机生成:'''
import random
def create_4_verification_code():
'''
生成四位固定格式的验证码:字母+数字+字母+数字
:return: 验证码
'''
verification_code = '' verification_code += chr(random.randint(65, 90))
verification_code += str(random.randint(0, 9))
verification_code += chr(random.randint(97, 122))
verification_code += str(random.randint(0, 9)) return verification_code print(create_4_verification_code()) def v_code():
'''
随机生成四位包含数字、大小写英文字母的验证码
:return: 四位验证码
'''
code = ''
for i in range(4):
num = random.randint(0, 9)
alf = chr(random.randint(97, 122))
alf = chr(random.randint(65, 90)) if random.randint(1, 2) == 2 else alf
add = random.choice([num, alf])
code = ''.join([code, str(add)])
return code print(v_code())
4、os模块
是与操作系统交互的一个接口
import os
# 1、os模块的属性
os.sep # 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep # 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep # 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
# 2、常见的方法介绍
# 1)目录相关
os.makedirs('dirname1/dirname2') # 可生成多层递归目录
os.removedirs('dirname1') # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') # 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") # 改变当前脚本工作目录;相当于shell下cd
# 2)文件相关
os.remove()
os.rename("oldname","newname") # 重命名文件/目录
os.stat('path/filename') # 获取文件/目录信息
# 注意:os.stat('path/filename') 获取文件/目录信息 的结构说明
# 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)是创建时间(详细信息参见平台的文档)。 # 3)路径相关 os.path
path = ''
path1 = ''
path2 = ''
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的大小 # 4)、其他
os.system("bash command") # 运行shell命令,直接显示
os.popen("bash command).read()") # 运行shell命令,获取执行结果
5、sys模块
import sys
sys.argv #命令行参数List,第一个元素是程序本身路径
sys.exit(n) #退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version #获取Python解释程序的版本信息
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称 # 异常处理和status
try:
sys.exit(1)
except SystemExit as e:
print(e)
Python进阶-XI 常用模块之一:collections、time、random、os、sys的更多相关文章
- 常用模块之 time,datetime,random,os,sys
time与datetime模块 先认识几个python中关于时间的名词: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“ty ...
- 21 模块(collections,time,random,os,sys)
关于模块importfrom xxx import xxx2. Collections1. Counter 计数器2. 栈: 先进后出.队列:先进先出deque:双向队列3. defaultdict ...
- day19:常用模块(collections,time,random,os,sys)
1,正则复习,re.S,这个在用的最多,re.M多行模式,这个主要改变^和$的行为,每一行都是新串开头,每个回车都是结尾.re.L 在Windows和linux里面对一些特殊字符有不一样的识别,re. ...
- 2019-7-18 collections,time,random,os,sys,序列化模块(json和pickle)应用
一.collections模块 1.具名元组:namedtuple(生成可以使用名字来访问元素的tuple) 表示坐标点x为1 y为2的坐标 注意:第二个参数可以传可迭代对象,也可以传字符串,但是字 ...
- Python——常用模块(time/datetime, random, os, shutil, json/pickcle, collections, hashlib/hmac, contextlib)
1.time/datetime 这两个模块是与时间相关的模块,Python中通常用三种方式表示时间: #时间戳(timestamp):表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. ...
- python之常见模块(time,datetime,random,os,sys,json,pickle)
目录 time 为什么要有time模块,time模块有什么用?(自己总结) 1. 记录某一项操作的时间 2. 让某一块代码逻辑延迟执行 时间的形式 时间戳形式 格式化时间 结构化时间 时间转化 总结: ...
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- python进阶06 常用问题库(2)datetime模块 base64
python进阶06 常用问题库(2)datetime模块 base64 一.datetime模块(时间) 1.datetime.time() t=datetime.time(20,43,30,1) ...
- python进阶05 常用问题库(1)json os os.path模块
python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...
随机推荐
- [[: not found,Ubuntu修改默认sh为bash
写好的shell sh执行脚本报错[[: not found,改shell多麻烦,索性直接把电脑默认的dash改成使用bash 1.查看目前使用 Ubuntu版本默认sh都是使用的dash 执行 ls ...
- Jenkins安装第一个插件和通过离线安装包进行安装
1.打开左侧Manage Jenkins 选择Manage Plugins菜单 2.搜索Folders插件,该插件用于创建一个目录 3.点击安装进入插件安装状态,Jenkins会自动下载相关联的插件 ...
- python 学习常见问题笔记
1.for...if...构建List segs = [v for v in segs if not str(v).isdigit()]#去数字 https://www.cnblogs.com/eni ...
- matplotlib画图相关
一. plt显示一副图像 1. import matplotlib.pyplot as plt 2. plt.figure() # 图像名称 3. plt.ims ...
- 1.go语言入门
1.Go语言中文网,选择相应版本(32位或64位)下载 https://studygolang.com/dl, 2.解压到一个任意文件夹 3.配置环境变量 cmd命令行输入go version查看当前 ...
- 使用 jQuery.TypeAhead 让文本框自动完成 (四)(自定义模板)
项目地址:https://github.com/twitter/typeahead.js 直接贴代码了: @section headSection { <script type="te ...
- JVM的内存分配策略
1.对象优先在Eden区分配大多数情况下,对象在新生代Eden区中分配.当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. 2.大对象直接进入老年代 所谓的大对象是指,需要大量连续 ...
- Winform 美化
首先,我们先来实现主界面的扁平化 此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件. 将主窗体FormBorderStyle更改为None,这样就得到了 ...
- vue-router 在项目中的使用
一.下载vue-router npm install vue-router --save 二.编码 1.在项目中新建文件夹 router/index.js /* * 路由对象模块 * */ impor ...
- Delphi CreateProcess
Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件 2010-12-27 17:00:17| 分 ...