colectiong模块
在python内置的数据类型(dict list set tuple)的基础上,collections模块还提供了几个额外的数据类型
Counter deque defaultdict namedtuple OrderedDict
Counter 计数器 用来计数的
deque 双端队列 不过这个两头都能进能出
defaultdict 带有默认值的字典
namedtuple 具名元组 直接生成可以使用名字来访问元素内筒的tuple
OrderedDict 有序的字典
namedtuple
# namedtuple(名字,其中的数据参数) 扑克牌 坐标 一个城市的信息 from collections import namedtuple # 坐标 point = namedtuple('坐标是',['x','y','z']) point_num = point(2,3,3) print(point_num) # 坐标是(x=2, y=3, z=3) print(point_num.x) # 2 print(point_num.y) # 3 print(point_num.z) # 3
# 扑克
Poker = namedtuple('poker','flower num')
Poker_type = Poker('♠','A')
print(Poker_type) # poker(flower='♠', num='A')
print(Poker_type.flower) # ♠
print(Poker_type.num) # A
城市
City = namedtuple('USA','name hobby')
City_n = City('Koby','basketball')
print(City_n) # USA(name='洛杉矶', hobby='Koby basetball')
print(City_n.name) # Koby
print(City_n.hobby) # basketball
队列
# 队列 先进先出(FIFO frist in frist out) 不能插队 import queue q = queue.Queue() # 生成队列对象 q.put('frist') # 向队列中添加值 q.put('second') q.put('third') print(q.get()) # frist 向队列要值 print(q.get()) # second print(q.get()) # third
print(q.get()) # 如果队列中的值取完了 程序不会报错 而是在哪里跌倒就在那里歇会 直到从队列中拿到值
deque
# deque 双端队列 append appendeleft pop popleft # from collections import deque #####自行解注释 q = deque(['a','b','c']) q.append('哈哈') # 追加 直接加在源列表最后 q.appendleft('你猜我在那里') # 在原列表的最开始添加元素 print(q) # deque(['你猜我在那里', 'a', 'b', 'c', '哈哈']) # p = deque([1,2,3]) print(p.pop()) # 按照索引弹出最后一个元素 print(p.popleft()) # 弹出第一个索引对应的值 # p = deque([1,2,3]) p.insert(2,'你把我插队在哪里') # 特殊 双端队列可以在根据索引在任意位置插值 print(p) # deque([1, 2, '你把我插队在哪里', 3]) p.insert(4,'你把我插在哪里') print(p) # deque([1, 2, '你把我插队在哪里', 3, '你把我插在哪里']) # dic = dict([('name','james'),('age',20)]) # 创建字典的方式 一般不用 print(dic) # {'name': 'james', 'age': 20}
OrderedDict
OrderedDict 有序字典 python中的字典是无序的 但是用了这个 是按照你书写的顺序了 from collections import OrderedDict dic = OrderedDict([('name','james'),('age','20')]) print(dic) # OrderedDict([('name', 'james'), ('age', '20')]) dic1 = OrderedDict() dic1['x'] = 1 dic1['y'] = 2 dic1['z'] = 3 print(dic1) # OrderedDict([('x', 1), ('y', 2), ('z', 3)])
defaultdict
num = [1,2,3,4,5,6,7,8,9] dic = defaultdict(list) for i in num: if i < 6: dic['k1'].append(i) else: dic['k2'].append(i) print(dic) # defaultdict(<class 'list'>, {'k1': [1, 2, 3, 4, 5], 'k2': [6, 7, 8, 9]})
my_dict1 = defaultdict(str) print(my_dict1['xxx']) # 返回空 my_dict2 = defaultdict(bool) print(my_dict2['kkk']) # False my_dict3 = defaultdict(tuple) print(my_dict3['mmm']) # () my_dict4 = defaultdict(int) print(my_dict4['yyy']) # 0 print(my_dict4['xxx']) # 0
Counter
先将字符串内容循环取值 加入字典的key 再计算次数 当作字典的value存入字典 from collections import Counter s = 'asdasdasdasdasd' res = Counter(s) print(res) # Counter({'a': 5, 's': 5, 'd': 5}) 一次尽量两步
time模块
时间的三种表现形式
1 时间戳 time.time 当前时间距离1970-01-01 00:00:00 过去的秒数
import time
print(time.time()) # 1563447416.9686005
2 格式化时间 time.strftime 按照一定的格式输出需要的时间 2019-07-18 18:46:46 例如这样子的
print(time.strftime('%Y-%m-%d')) # 2019-07-18
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2019-07-18 18:56:15
print(time.strftime('%Y-%m-%d %X')) # 2019-07-18 18:56:15 %X等价于%H:%M:%S
3 结构化时间 time.localtion 当前的是按照一定的结构 time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=18, tm_min=47, tm_sec=55, tm_wday=3, tm_yday=199, tm_isdst=0)
格式化时间的字符串
%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 当前时区的名称 %% %号本身 python中时间日期格式化符号:
datetime模块
import datetime print(datetime.date.today()) # 2019-07-18 今天的日期 年月日的形式输出 print(datetime.datetime.today()) # 2019-07-18 18:54:18.496601 也是今天是日期 年月日时分秒
res = datetime.date.today()
print(res.year) # 2019
print(res.month) # 7
print(res.day) # 18
print(res.weekday()) # 3 0-6表示星期 0表示周一
print(res.isoweekday()) # 1-7表示星期 7就是周日
时间的运算
# 天数 timedalta local_time = datetime.date.today() # 2019-07-18 # 日期对象 num_time = datetime.timedelta(days=10) # 10天 运算天数 res = local_time+num_time # 今天过后10天 res1 = local_time-num_time # 今天之前10天 print(res) # 2019-07-28 print(res1) # 2019-07-08
UTC时间 根据格林威治的时间
dt_today = datetime.datetime.today() dt_now = datetime.datetime.now() dt_utcnow = datetime.datetime.utcnow() print(dt_utcnow) # 2019-07-18 11:09:33.884600 print(dt_now) # 2019-07-18 19:09:33.884600 print(dt_today) # 2019-07-18 19:09:33.884601
random模块(随机数)
import random print(random.randint(0,9)) # 随机一个范围内的整数 print(random.random()) # 小数点后面17位 随机一个0-1之间的小数 print(random.choice([1,2,3,4,5,6,7,8,9])) # 随机选取一个列表内的数 适用于摇号 # shuffle # 洗牌 数据随机打乱 num = [1,2,3,4,5,6,7,8,9] random.shuffle(num) print(num)
随机验证码联系
import random verification_num = input('输入验证码位数:') verification_num = int(verification_num) def verification(verification_num): verification_code = '' for num in range(verification_num): upper_str = chr(random.randint(65,90)) lower_str = chr(random.randint(97,122)) random_int = str(random.randint(0,9)) verification_code += random.choice([upper_str,lower_str,random_int]) print(verification_code) return verification_code verification(verification_num)
os模块
os 模块是与操作系统交互的一个接口
import os # os 使用方法 os.remove() 删除一个文件 os.rename('原名字','修改后名字') 修改文件名字 os.mkdir('文件名') 生成一个单级的空目录 os.rmdir('文件名') 删除一个单级的空目录 目录不为空 无法删除 会报错 os.listdit('文件名') 列出指定文件下所有的文件和子目录 包括隐藏文件 os.makedirs('文件1/文件2/文件3') 生成一个多层的目录 os. removedirs('文件名') 目录为空的 就删除 并返回上一级目录 还空 就继续删 以此类推 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.exists(path) 检查文件路径是否存在,存在返回Ture 不存在返回False
os.path.ahspath(path) 返回规范的绝对路径
os.path.isabs(path) 判断路径是不是绝对路径 是 返回 Ture
os.path.isfile(path) 判断是不是一个存在的文件 是 返回Ture
否则返回None
os.path.isdir(path) 判断是否是存在的目录 存在返回Ture 否则返回None
os.path.dirname(path) 返回路径文件的目录
os.path.split(path) 路径切分成目录和文件名
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
sys模块
sys模块是和python解释器交互的一个接口
import sys sys.path.append() 将某个路径添加在环境变量中
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称