在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要用来计数 4.OrderedDict: 有序字典 5.defaultdict: 带有默认值的字典
namedtuple
from collections import namedtuplePoint = namedtuple('point',['x','y','z'])p1 = Point(3,2,1)p2 = Point(1,2,3)print(p1.x)print(p1.y)print(p1)print(p2.x)print(p2.y)print(p2)
Card = namedtuple('card',['suits','number'])c1 = Card('红心',2)print(c1)print(c1.number)print(c1.suits)
deque
from collections import dequedq = 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()) #从后面取数据print(dq .popleft()) #从前面取数据ab
# OrderedDict
from collections import OrderedDictd = dict([('a', 1), ('b', 2), ('c', 3)])# dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2}od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])print(od)# OrderedDict的Key是有序的OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# defaultdict
from collections import defaultdictvalues = [11, 22, 33,44,55,66,77,88,99,90]my_dict = defaultdict(list)for value in values: if value>66: my_dict['k1'].append(value) else: my_dict['k2'].append(value)
使用dict
时,如果引用的Key不存在,就会抛出KeyError
。如果希望key不存在时,返回一个默认值,就可以用defaultdict
:
>>> from collections import defaultdict>>> dd = defaultdict(lambda: 'N/A')>>> dd['key1'] = 'abc'>>> dd['key1'] # key1存在'abc'>>> dd['key2'] # key2不存在,返回默认值'N/A'
Time模块
''' 表示时间的三种方式 在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。 (2)格式化的时间字符串(Format String): ‘1999-12-06’ (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等) 字符串---格式化时间:给人看的 时间戳时间---float时间,给计算机看的 结构化时间---元祖:计算用的 python中时间日期格式化符号: %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 当前时区的名称 %% %号本身 ''' # import time # time.sleep(100) # print(time.time()) # print(time.strftime("%Y-%m-%d %X")) # print(time.strftime("%Y-%m-%d %X")) # print(time.strftime("%Y-%m-%d %H-%M-%S")) #year month day HOUR MINUTE SECOND # print(time.strftime("%Y/%m/%d %b %a %H-%M-%S %j")) #year month day HOUR MINUTE SECOND # struct_time = time.localtime() # print(struct_time) # print(struct_time.tm_year) import time #时间戳和结构化时间 # t = time.time() # print(t) # print(time.localtime(3049063158)) # print(time.gmtime(t)) # print(time.mktime(time.localtime())) #结构化时间-->字符串时间 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(3000000000))) # #字符串时间-->结构化时间 # print(time.strptime("2000-03-16","%Y-%m-%d")) #结构化时间 --> %a %b %d %H:%M:%S %Y串 #time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串 # time.asctime(time.localtime(1500000000)) # 'Fri Jul 14 10:40:00 2017' # time.asctime() # 'Mon Jul 24 15:18:33 2017' #时间戳 --> %a %b %d %H:%M:%S %Y串 #time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串 # time.ctime() # 'Mon Jul 24 15:19:07 2017' # time.ctime(1500000000) # 'Fri Jul 14 10:40:00 2017' random模块
import random #随机小数 # random.random() # 大于0且小于1之间的小数 # 0.7664338663654585 # random.uniform(1,3) #大于1小于3的小数 # 1.6270147180533838 #恒富:发红包 #随机整数 # random.randint(1,5) # 大于等于1且小于等于5之间的整数 # random.randrange(1,10,2) # 大于等于1且小于10之间的奇数 #随机选择一个返回 # print(random.choice([1,'23',[4,5]])) # #1或者23或者[4,5] #随机选择多个返回,返回的个数为函数的第二个参数 # random.sample([1,'23',[4,5]],2) # #列表元素任意2个组合 # [[4, 5], '23'] #打乱列表顺序 # item=[1,3,5,7,9] # random.shuffle(item) # 打乱次序 # item # [5, 1, 3, 7, 9] # random.shuffle(item) # item # [5, 9, 7, 1, 3] # 生成随机验证码 import random def v_code(): code = '' for i in range(5): num=random.randint(0,9) alf=chr(random.randint(65,90)) add=random.choice([num,alf]) code="".join([code,str(add)]) return code print(v_code()) os模块
os.makedirs('dirname1/dirname2') 可生成多层递归目录os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirnameos.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirnameos.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下cdos.pathos.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不存在,返回Falseos.path.isabs(path) 如果path是绝对路径,返回Trueos.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回Falseos.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间os.path.getsize(path) 返回path的大小
# print(os.getcwd())# os.chdir(r'D:\Python\PY\9python')# print(os.getcwd())# print(os.curdir)# print(os.pardir)# os.makedirs('os1/os2') #创建目录# os.removedirs('os1/os2') #递归删除目录# os.mkdir('dirname') #创建文件夹# os.rmdir('dirname')# print(os.listdir(r'D:/Python/PY/9python')) #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印# print(os.stat('time模块.py') ) #获取文件/目录信息# print(os.sep)# os.system('dir') #运行shell命令,直接显示# ret = os.popen('dir').read() #运行shell命令,获取执行结果# print(ret)# print(os.path.split(os.getcwd())) #将path分割成目录和文件名二元组返回# print(os.path.dirname(os.getcwd()))# print(os.path.isfile(r'D:/Python/PY/9python/py9-day19-模块1/os模块.py')) #如果path是一个存在的文件,返回True。否则返回False# print(os.path.join(r'c:','user','local')) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略# print(os.path.getatime(r'D:/Python/PY/9python/py9-day19-模块1/os模块.py')) #返回path所指向的文件或者目录的最后访问时间#print(os.path.getmtime(r'D:/Python/PY/9python/py9-day19-模块1/os模块.py')) #返回path所指向的文件或者目录的最后修改时间#print(os.path.getsize(os.path.join(os.getcwd(),'os模块.py'))) #返回path的大小
sys模块
import sys# print(sys.platform) #返回操作系统平台名称# print(sys.version) #获取Python解释程序的版本信息# sys.exit() #退出程序,正常退出时exit(0),错误退出sys.exit(1)# print(sys.path) #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值ret = sys.argvname = ret[1]pwd = ret[2]if name == 'tim' and pwd =='tim123': print('login on')else: print('fail') sys.exit()print('gogog')