一、collection 模块
二、time 模块
三、random 模块
四、os 和sys mo模块
五、系列化与反序列化 json 模块
六、subprocess 模块
一、collection 模块
1.1 namedtuple(具名分组)
# 1.可以表示坐标二维和三维 # from collections import namedtuple # # point = namedtuple('坐标',['x','y','z']) # 第一个为字段名 第二个参数为可以迭代对象 # # p = point(1,2,4) # print(p) # 坐标(x=1, y=2, z=4) # 2.洗牌 # from collections import namedtuple # t = namedtuple('扑克牌',' color num') # t1 = t('黑桃','A') # print(t1.color) # print(t1.num) # l = [90,1,2,9,4,5,8,23,42,5,6] # import random # random.shuffle(l) # print(l) # # # 对应的人物 # r = namedtuple('日本','name person size') # r1 = r('东京','宫崎骏','m') # print(r1)
# 2.queue(队列:)与deque()双端队列
# 2.queue(队列) # 队列:先进先出 # l = [12,22,33,44] # import queue # # 先生成一个对象 # q = queue.Queue() # # 往队列里面添加值 # q.put('1') # q.put('2') # q.put('3') # q.put('4') # 朝队列要值 # print(q.get()) # print(q.get()) # print(q.get()) # print(q.get()) # print(q.get()) # 没有值了get()会一直等待用户传值,直到等到为止 # deque双端队列:所谓的双端队列就是两边都可以进出 # from collections import deque # q = deque(['a','b','c']) # deque外层是小括号 # q.append(1) # q.append(2) # q.appe nd(3) # print(q) # ['a', 'b', 'c', 1, 2, 3] 一次重尾部添加 # appendlef() # q.appendleft(2) # print(q,type(q)) # # q.popleft() # q.popleft(1) # popleft()删除元素不用传参 # print(q)
# 3.orderedDict(有序字典)
# 和正常字典做对比 # from collections import OrderedDict # normal_dic = {'name':'coc','age':18} # order_d = OrderedDict([('a',1),('b',2),('b',3)]) # print(order_d,type(order_d)) # order_d['x'] = 1 # order_d['y'] = 2 # order_d['z'] = 3 # for i in order_d: # print(i)
# 4.defaultDict(默认字典)
values = [11, 22, 33,44,55,66,77,88,99,90] # 将大于66的值添加到字典中不要先将value 设为空列表 # 之前的用法为 # 方法一: # dic = {'k1':[],"k2":[]} # for i in values: # if i >66: # dic['k1'].append(i) # else: # dic['k2'].append(i) # print(dic) # 方法二: # 不能设置默认的[]列表了,怎么做:.>>巧了刚好有个defaultDict() # (默认是你输入什么类型就是什么类型)后续该字典中新建的Key对应的values默认就是列表 # from collections import defaultdict # # my_dic = defaultdict(list) # # print(my_dic['']) # [] # # print(my_dic['yyy']) # [] # for i in values: # if i>66: # my_dic['k1'].append(i) # else: # my_dic['k2'].append(i) # print(my_dic) #
# 5.Counter(字符串计数器):可以直接以字典的形式
# 统计字符串中出现的个数并且以字点的个数作为value s = 'qwwwqqqeee' # 方法一: # dic = {} # for i in s: # if i in dic: # dic[i] +=1 # # else: # dic[i] =1 # print(dic) # 方法二: from collections import Counter l = dict(Counter(s)) # 可以直接转 print(l) # dic = {} for i in l.items(): # 内部原理 dic[i[0]] = i[1] print(dic)
二、时间模块
"""
三种表现形式
1.时间戳
2.格式化时间(用来展示给人看的)
3.结构化时间
"""
# 字符串的转换
# import time
# res = time.strftime('%Y-%m-%d %X') # 2019-07-18 20:39:43
# print(res) # 2019-07-18 20:33:37
#
# datetime
# import datetime
#
# res1 = datetime.date.today() # 2019-07-18
# res2 = datetime.datetime.today() # 2019-07-18 20:39:43.402935
#
#
# print(res1)
# print(res2)
# print(res2.isoweekday()) # 4 周四
# print(res1.month,res1.year,res1.day) #7 七月: 2019 年: day:18
# UTC时间 标准时间
import datetime
day_t = datetime.datetime.utcnow()
print(day_t) # 2019-07-18 12:42:59.687143 东八区
三、random模块
"""
大写字母 小写字母 数字
5位数的随机验证码
chr
random.choice
封装成一个函数,用户想生成几位就生成几位
"""
ef get_code(n): code = '' for i in range(n): # 先生成随机的大写字母 小写字母 数字 upper_str = chr(random.randint(65,90)) lower_str = chr(random.randint(97,122)) random_int = str(random.randint(0,9)) # 从上面三个中随机选择一个作为随机验证码的某一位 # random.choice() 是一个方法 code += random.choice([upper_str,lower_str,random_int]) return code res = get_code(4) print(res)
四、os和sys 模块
# os模块:跟操作系统打交道的模块
# sys模块:跟python解释器打交道
4.1os 中常用的方法:
# # 可以通过listdir()拿到文件下的所有文件 import os # os.mkdir('明日内容') # 创建文件夹 # 2.os.exists() # print(os.path.exists('D:\datas\day16\今日作品\coco.txt')) # 判断文件/文件夹是否存在 # 3.os.isfile() # print(os.path.isdir('D:\datas\day16\今日作品')) # 判断文件夹是否存在 # 4. # os.getcwd() print(os.getcwd()) # D:\datas\day16 查看当前文件运行的文件目录路径 print(os.chdir('D:\datas\day16\今日作品')) print(os.getcwd()) # D:\datas\day16\今日作品 切换当前的文件目录 print(os.path.getsize('D:\datas\day16\今日作品\coco.txt')) # 字节数
实列:
# os 中常用的方法: # 需求打开文件的内容(下载电影): # 拼接文件的路径: # import os # BASE_DIR = os.path.dirname(__file__) # 当前所在是os模块层只要上一级 # # 项目所在文件夹路径: # MOVIE_LIST_DIR = os.path.join(BASE_DIR,'今日作品') # 拼接仅仅只能到到当前的电影目录,没有文件名 # # # 可以通过listdir()拿到文件下的所有文件 # movie_list = os.listdir(MOVIE_LIST_DIR) # # for index,movie in enumerate(movie_list,1): # print(index, movie) # choice = input('输入电影索引(今日推荐tank热搜)>>>:').strip() # if choice.isdigit(): # choice = int(choice) # if choice in range(1,len(movie_list)+1): # # 想要获取用户的文件名 # target_name = movie_list[choice-1] # 取索引 # # # 拼接文件的绝对路径 # target_name_path = os.path.join(MOVIE_LIST_DIR,target_name) # # 打开文件 # with open(target_name_path,'r',encoding='utf-8')as f: # for line in f: # print(line)
4.2 sys模块
# sys.path.append() # 将环境变量添加到系统的环境变量中
print(sys.version) # 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
print(sys.argv) # 命令行启动文件 可以做身份的验证
if len(sys.argv) <= 1:
print('请输入用户名和密码')
else:
username = sys.argv[1]
password = sys.argv[2]
if username == 'jason' and password == '123':
print('欢迎使用')
# 当前这个py文件逻辑代码
else:
print('用户不存在 无法执行当前文件')
五、json模块:
序列化与反序列化:
5.1 什么是序列化:
序列化
序列:字符串
序列化:其他数据类型转换成字符串的过程
写入文件的数据必须是字符串
基于网络传输的数据必须是二进制
5.2 什么是反序列化:
序列化:其他数据类型转成字符串的过程
反序列化:字符串转成其他数据类型
5.3 json能够序列化的数据类型:
json模块(******)
所有的语言都支持json格式
支持的数据类型很少 字符串 列表 字典 整型 元组(转成列表) 布尔值
pickle模块(****)
只支持python
python所有的数据类型都支持
实列:
mport json with open(r'D:\datas\day16\1.txt','rt',encoding='utf-8')as f: # f方法一: # for line in f: # ic = json.loads(res) # user_dic1 = json.load(f) # print(user_dic) # print(user_dic1) # print(user_dic) # for line in f: # user_dic = json.loads(line) # print(user_dic) # res = f.read() # user_dic =json.loads(res) # print(user_dic) # user_dic = json.load(f) # print(user_dic)
总结今天遇到的问题:
1.是在写随机生成验证码的时候忘记将 num = random.randint(0,9) 转成字符串 因为我们要拼接成字符串 alp_lower = chr(random.randint(65,90)
2.在写文件os.listdir()将改目录下的所有文件打印出来;for index,moive in enumerate()在后面加了start=1 会将序列的索引变为从一开始
3,在选择movie_list 文件名的时候 必须choice-1 因为moive_List[choice]是索引 所以要将1 索引默认是0 开始 不然取不到文件
4.在写json模块序列化与反序列化的时候
操作方法总结:
序列化:json.dumps() dunmps() 是将其他数据类型转化成字符串直接存到文件
反序列化:json.laods()是将字符串 读取成原来存的数字类型:注意若文件中存了多组记得for 依次循环获取每行字符串在通过
res = f.read() 单行
for line in f:
user_dic = json.loads(line)
json.loads(res/line)
# dump():序列化:是将数据类型如 json 能就解析的数据类型:dict lsit ,字符串,整形,bool,元组转成json中的列表对象、
res = json.dump(user_dic,f) 通过文件句柄对象写到文件中
load() 将字符串反序列为存的数据类型(user_dic) 通过操作文件反序列化。
picle()写的时候注意是二进制 ,存的是对象obj
json宗旨总之以什么方式存的,取得时候就给我返回什么数据类型