常用模块(collections,time,sys)

collections

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等


namedtuple 可命名元组

from collections import namedtuple  # 可命名元组
P = namedtuple('point',['x','y'])
p = P(1,2)
print(p)  # point(x=1, y=2)
print(p.x)  # 1
print(p.y)  # 2
# 描述一类东西的时候,这一类东西都有相同的特征,想直接用特征的名字就描述这个值的时候就可以用可命名元组

 

队列:一种数据结构,先进先出
FIFO:FIRST IN FIRST OUT

import queue  # 队列_多线程多进程 处理任务
q = queue.Queue()  # 创建了一个队列q
q.put(1)  # 往里放值
q.put(2)
q.put(300)
q.put('aaa')
q.put('wahaha')
print(q.qsize())  # 5 查看当前队列有多大
print(q.get())  # 1 往外拿值
print(q.get())
print(q.get())
print(q.get())
print(q.get())
# print(q.get())  # 拿完了会等着 q.get_nowait()不等,拿完会报错

 

deque  双端队列

from collections import deque  # 双端队列
dq = deque()
dq.append('a')
print(dq)  # deque(['a'])
dq.append('b')
dq.appendleft('c')
print(dq)  # deque(['c', 'a', 'b'])
print(dq.pop())  # b
print(dq.popleft())  # c

 

OrderedDict   有序字典

from collections import OrderedDict  # 有序字典
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
for k in od:
    print(k,od[k])

 

defaultdict 默认字典

from collections import defaultdict
my_dict = defaultdict(list)  # 给字典的value设置一个默认值,默认值必须是可调用的
print(my_dict['k'])  # [] 当key不存在时,不报错,会返回设置的默认值

dd = defaultdict(lambda: 'N/A')  # 默认值必须是可调用的callable
dd['key1'] = 'abc'
print(dd['key1'])  # key1存在 'abc'
print(dd['key2'])  # key2不存在,返回默认值 'N/A'

 

counter

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)  # 输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

 

time时间模块

和时间有关系的我们就要用到时间模块。在使用模块之前,应该首先导入这个模块

import time
time.sleep(1) # 睡1秒

 

表示时间的三种格式

在Python中,通常有这三种方式来表示时间:时间戳、结构化时间元组(struct_time)、格式化的时间字符串

时间戳

时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型

time.time()  # 1500875844.800804

 

格式化的时间字符串

格式化的时间字符串(Format String): ‘1999-12-06’

time.strftime("%Y-%m-%d %X")  # string format time
'2017-07-24 13:54:37'
time.strftime("%Y-%m-%d %H-%M-%S")
'2017-07-24 13-55-04'
# %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 当前时区的名称
# %% %号本身

 

结构化时间元组

元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

# 时间元组:localtime将一个时间戳转换为当前时区的struct_time
time.localtime()  # 本地时间
time.gmtime()  # 伦敦时间
# time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
#                   tm_hour=13, tm_min=59, tm_sec=37,
#                  tm_wday=0, tm_yday=205, tm_isdst=0)

 

几种时间格式之间的转换

ret = time.localtime(1000000000)  # localtime 时间戳转换为结构化时间
print(ret)
print(time.mktime(ret))  # mktime 结构化时间转换为时间戳
ret2 = time.strftime('%Y-%m-%d %a %X',ret)  # strftime 结构化时间转换字符串时间
print(ret2)
time.strptime('1990-3-31','%Y-%m-%d')  # 字符串时间转换结构化时间

print(time.asctime())  # Tue Nov 14 12:22:53 2017 括号内可以放结构化时间
time.ctime(1000000)  # 将时间戳转换为上面的格式

 

计算时间差例子

start_time = 1500000000
now = time.time()
struct_time = time.gmtime(now -start_time)  # 将时间转换为伦敦时间后计算
print(struct_time.tm_year - 1970)
print(struct_time.tm_mon - 1)
print(struct_time.tm_mday - 1)

 

sys模块

sys模块是与python解释器交互的一个接口

sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称

import sys
print(sys.platform)  # win32 操作系统平台名称

print(sys.version) # python解释器的版本
#
sys.exit() 直接退出程序
print(sys.path) # sys.path就是模块导入的时候从这个列表中的路径依次去寻找模块 # 找到了就停止 # sys.path的第一位元素是当前被执行的python文件所在的地址 # 之后的地址依次是python内部的库 # sys.argv 以列表的形式接收参数,第一个元素为执行的文件名 print(sys.argv) # python 6sys.py # python 6sys.py alex 3714 args_lst = sys.argv # ['6sys.py','alex','3714'] if len(args_lst) == 3 and args_lst[1] == 'alex' and args_lst[2] == '3714': print('执行程序了') else: sys.exit() # sys.argv 的第一个值是固定的,就是这个文件的名字 # 之后的参数实在控制台执行py文件的时候传入的参数 # 我们可以用这些参数来直接完成一些校验类的工作

 

posted on 2017-11-14 15:30  杨小天  阅读(139)  评论(0编辑  收藏  举报