常用模块升级

匿名 (未验证) 提交于 2019-12-02 23:49:02

  一、collection 模块

  二、time 模块

  三、random 模块

  四、os 和sys mo模块

  五、系列化与反序列化 json 模块

  六、subprocess 模块

  一、collection 模块

  

# 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位数的随机验证码chrrandom.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.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)    

   res = json.dump(user_dic,f) 通过文件句柄对象写到文件中

   load() 将字符串反序列为存的数据类型(user_dic) 通过操作文件反序列化。

  json宗旨总之以什么方式存的,取得时候就给我返回什么数据类型

  

 
 
 
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!