常用模块及其使用

一、collctions模块

1.namedtuple

可以表示点的坐标,并且具有名称。

 1 from collections import namedtuple
 2 point = namedtuple('坐标',['x','y','z']) #第二个参数可以传迭代对象
 3 point1 = namedtuple('坐标','x y z') #第二个参数也可以传字符串,但是中间要用空格隔开
 4 p = point(1,3,5)
 5 p1 = point(2,4,6)
 6 print(p)
 7 print(p1)
 8 print(p.x)
 9 print(p.y)
10 print(p.z)

2.queue

2.1 队列先进先出(FIFO)

import queue
q = queue.Queue() #生成队列对象
q.put('first') #往队列中添加值
q.put('second')
q.put('third')

print(q.get()) #向队列要值
print(q.get())
print(q.get())
print(q.get()) #如果队列中的值取完了,程序会在原地等待,直到从队列中拿到值才停止

2.2 deque双端队列

1 from collections import deque
2 q = deque(['a','b','c'])
3 q.append(1) #从尾部插入
4 q.appendleft(2) #插入双端队列的左端
5 print(q.pop()) #从尾部弹出
6 print(q.popleft()) #从左边尾部弹出
7 print(q.popleft()) #从左边尾部弹出

3.ordererdict

 1 from collections import OrderedDict
 2 order_d = OrderedDict([('a',1),('b',2),('c',3)])
 3 print(order_d)
 4 
 5 order_d1 = OrderedDict()
 6 order_d1['x'] = 1
 7 order_d1['y'] = 2
 8 order_d1['z'] = 3
 9 print(order_d1)
10 
11 for i in order_d1:
12     print(order_d1[i])

4.defaultdict

习题:在列表[11, 22, 33,44,55,66,77,88,99,90]中,将大于66的数,放入关键字k1中,小于等于66的数放入关键字k2中。

 1 from collections import defaultdict
 2 
 3 values = [11, 22, 33,44,55,66,77,88,99,90]
 4 my_dict = defaultdict(list) #后续该字典中新建的key对应的value默认就是列表
 5 for i in values:
 6     if i > 66:
 7         my_dict['k1'].append(i)
 8     else:
 9         my_dict['k2'].append(i)
10 print(my_dict)

5.counter

用来统某个字符出现的次数,这样我们在统计一个字符出现次数的时候会方便很多

1 from collections import Counter
2 s = 'asdaefqdasdawfasdw'
3 res = Counter(s)
4 print(res)

二、时间模块

1.时间戳

2.格式化时间(用来展示给人看的)

3.结构化时间

1 import time
2 
3 print(time.time()) #1563447223.4735847
4 print(time.strftime('%Y-%m-%d')) #2019-07-18
5 print(time.strftime('%Y-%m-%d %H:%M:%S')) #2019-07-18 18:53:43
6 print(time.strftime('%Y-%m-%d %X')) #等价于%H:%M:%S
7 print(time.strftime('%H:%M')) #18:53
8 print(time.strftime('%Y/%m')) #2019/07

1.localtime()

1 import time
2 print(time.localtime()) #time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=19, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=199, tm_isdst=0)
3 print(time.localtime(time.time())) #time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=19, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=199, tm_isdst=0)
4 res = time.localtime(time.time())
5 print(time.mktime(res)) #1563447600.0
6 print(time.strftime('%Y-%m',time.localtime())) #2019-07
7 print(time.strptime(time.strftime('%Y-%m',time.localtime()),'%Y-%m')) #time.struct_time(tm_year=2019, tm_mon=7, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=182, tm_isdst=-1)

2.datetime()

1 import datetime
2 print(datetime.date.today()) #date>>>:年月日
3 print(datetime.datetime.today()) #datetime>>>:年月日 时分秒
4 res = datetime.date.today()
5 print(res.year) #2019
6 print(res.month) #7
7 print(res.day) #18
8 print(res.weekday()) # 0-6表示星期 0表示周一
9 print(res.isoweekday()) # 1-7表示星期 1表示周一

日期对象 = 日期对象 +/- timedelta对象

timedelta对象 = 日期对象 +/- 日期对象

1 import datetime
2 current_time = datetime.date.today()
3 timetel_t = datetime.timedelta(days=7)
4 res1 = current_time + timetel_t
5 print(current_time - timetel_t) #2019-07-11
6 print(res1-current_time) #7 days, 0:00:00

小练习:计算今天距离生日还有多少天

1 import datetime
2 birth = datetime.datetime(2019,11,24,19,25,0)
3 current_date = datetime.datetime.today()
4 print(birth-current_date)

utc时间

1 import datetime
2 
3 dt_now = datetime.datetime.now()
4 dt_utcnow = datetime.datetime.utcnow()
5 print(dt_now)
6 print(dt_utcnow)

三、random模块

1 import random
2 
3 print(random.randint(1,6)) #随机取一个你提供的整数范围内的数字,包含首尾
4 print(random.random()) #随机取0-1之间的小数
5 print(random.choice([1,2,3,4,5,6])) #摇号性质,随机从列表中取出一个元素
6 res = [1,2,3,4,5,6]
7 random.shuffle(res) #类似于洗牌,将列表中元素顺序打乱
8 print(res)

小练习:生成随机的验证码,5位数的随机验证码,封装成一个函数,用户想生成几位就生成几位

 1 import random
 2 
 3 def random_code(n):
 4     code = ''
 5     for i in range(n):
 6         upper_str = chr(random.randint(65,90))
 7         lower_str = chr(random.randint(97,122))
 8         num = str(random.randint(0,9))
 9         code+= random.choice([upper_str,lower_str,num])
10     return code
11 res = random_code(5)
12 print(res)

四、os模块

os模块:跟操作系统打交道的模块

 1 import os
 2 BASE_DIR = os.path.dirname(__file__)
 3 MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品ed2k')
 4 movie_list = os.listdir(MOVIE_DIR)
 5 while True:
 6     for i,j in enumerate(movie_list,1):
 7         print(i,j)
 8     choice = input('老板想看什么啊(今日top1:Rio老师)>>>')
 9     if choice.isdigit():
10         choice = int(choice)
11         if choice in range(1,len(movie_list)+1):
12             get_file = movie_list[choice-1]
13             get_path = os.path.join(MOVIE_DIR,get_file)
14             with open (get_path,'r',encoding='utf-8')as f:
15                 print(f.read())

知识点补充:os.path.exist 判断文件是否存在

      os.path.isfile 只能判断文件,不能判断文件夹

      os.rmdir 只能删除空文件夹  

      os.getcwd 返回当前所在位置  

      os.chdir切换当前所在的目录

      os.path.getsize 获取文件大小(字节大小)

五、sys模块

sys模块:跟python解释器打交道模块

 1 import sys
 2 print(sys.argv)
 3 if len(sys.argv) <=1 :
 4     print('请输入用户名和密码')
 5 else:
 6     username = sys.argv[1]
 7     password = sys.argv[2]
 8     if username == 'zzj' and password == '123':
 9         print('欢迎使用')
10     else:
11         print('用户名不存在,无法执行当前文件')

这里用终端运行:

六、序列化模块

序列:字符串

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

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

写入文件的数据必须是字符串

基于网络传输的必须是二进制

json模块:所有的语言都支持jason格式

     支持的数据类型很少:字符串、列表、字典、整型、元组、布尔值

1 import json
2 d = {'name':'zzj'}
3 res = json.dumps(d)
4 print(res,type(res)) #{"name": "zzj"} <class 'str'>
5 res1 = json.loads(res)
6 print(res1,type(res1)) #{'name': 'zzj'} <class 'dict'>

pickle模块:只支持python

       python所有的数据类型都支持

1 import pickle
2 d = {'name':'zzj'}
3 res = pickle.dumps(d)
4 print(res,type(res))
5 res1 = pickle.loads(res)
6 print(res1,type(res1))

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

1 import pickle
2 d = {'name':'zzj'}
3 with open ('userinfo','wb')as f:
4     pickle.dump(d,f)
5 
6 with open ('userinfo','rb')as f:
7     res = pickle.load(f)
8     print(res,type(res))

七、subprocess模块

sub:子

process:进程

1.用户用过网络连接上了你的这台电脑

2.用户输入相应的命令,基于网络发送给了你这台电脑上的某个程序

3.获取用户命令,里面subproces执行该用户命令

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'))

 

posted @ 2019-07-18 21:56  朱朱朱朱朱  阅读(212)  评论(0编辑  收藏  举报