collections模块
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
namedtuple(具名元组)
可以表示不变集合,可以用具名元组来记录一个城市的信息,一个点的二维坐标也可以表示,还可以用坐标和半径表示一个圆
>>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> p = Point(1, 2) >>> p.x 1 >>> p.y 2 >>> from collections import namedtuple >>> City = namedtuple('City', 'name country population coordinates') # 第一个是类名,第二个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串 >>> tokyo = City('Tokyo', 'JP', 36.933, (35.689722, 139.691667)) >>> tokyo City(name='Tokyo', country='JP', population=36.933, coordinates=(35.689722, 139.691667)) >>> tokyo.population 36.933 >>> tokyo.coordinates (35.689722, 139.691667) >>> tokyo[1] 'JP' #namedtuple('名称', [属性list]): Circle = namedtuple('Circle', ['x', 'y', 'r'])
时间模块
时间模块的三中表现形式:
1,时间戳 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
2,格式化时间 格式化的时间字符串(Format String): ‘1999-12-06’
3 ,结构化时间 )元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
random模块
随机模块
import random print(random.randint(1,6)) # 随机取一个你提供的整数范围内的数字 包含首尾 print(random.random()) # 随机取0-1之间小数 print(random.choice([1,2,3,4,5,6])) # 摇号 随机从列表中取一个元素 res = [1,2,3,4,5,6] random.shuffle(res) # 洗牌 print(res) # 生成随机验证码 """ 大写字母 小写字母 数字 5位数的随机验证码 chr random.choice 封装成一个函数,用户想生成几位就生成几位 """ def 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)) # 从上面三个中随机选择一个作为随机验证码的某一位 code += random.choice([upper_str,lower_str,random_int]) return code res = get_code(4) print(res)
os模块
os模块是与操作系统交互的一个接口
import os # BASE_DIR = os.path.dirname(__file__) # MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品') # movie_list = os.listdir(MOVIE_DIR) # while True: # for i,j in enumerate(movie_list,1): # print(i,j) # choice = input('你想看谁的啊(今日热搜:tank老师)>>>:').strip() # if choice.isdigit(): # 判断用户输入的是否是纯数字 # choice = int(choice) # 传成int类型 # if choice in range(1,len(movie_list)+1): # 判断是否在列表元素个数范围内 # # 获取用户想要看的文件名 # target_file = movie_list[choice-1] # # 拼接文件绝对路径 # target_path = os.path.join(MOVIE_DIR,target_file) # with open(target_path,'r',encoding='utf-8') as f: # print(f.read()) # os.mkdir('tank老师精选') # 自动创建文件夹 # print(os.path.exists(r'D:Python项目day16 ion老师精选')) # 判断文件是否存在 # print(os.path.exists(r'D:Python项目day16老师们的作品 ank老师.txt')) # 判断文件是否存在 # print(os.path.isfile(r'D:Python项目day16 ank老师精选')) # 只能判断文件 不能判断文件夹 # print(os.path.isfile(r'D:Python项目day16老师们的作品 ank老师.txt')) # 只能判断文件 不能判断文件夹 # os.rmdir(r'D:Python项目day16老师们的作品') # 只能删空文件夹 # print(os.getcwd()) # print(os.chdir(r'D:Python项目day16老师们的作品')) # 切换当前所在的目录 # print(os.getcwd()) # 获取文件大小 # print(os.path.getsize(r'D:Python项目day16老师们的作品 ank老师.txt')) # 字节大小 # with open(r'D:Python项目day16老师们的作品 ank老师.txt',encoding='utf-8') as f: # print(len(f.read()))
sys模块
import sys # sys.path.append() # 将某个路径添加到系统的环境变量中 # print(sys.platform) # print(sys.version) # python解释器的版本 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('用户不存在 无法执行当前文件')
序列化模块
序列化
序列:字符串
序列化:其他数据类型转换成字符串的过程
写入文件的数据必须是字符串
基于网络传输的数据必须是二进制
d = {'name':'jason'} 字典 str(d) 序列化:其他数据类型转成字符串的过程 反序列化:字符串转成其他数据类型 json模块(******) 所有的语言都支持json格式 支持的数据类型很少 字符串 列表 字典 整型 元组(转成列表) 布尔值 pickle模块(****) 只支持python python所有的数据类型都支持 """ import json """ dumps:序列化 将其他数据类型转成json格式的字符串 loads:反序列化 将json格式的字符串转换成其他数据类型 dump load """ # d = {"name":"jason"} # print(d) # res = json.dumps(d) # json格式的字符串 必须是双引号 >>>: '{"name": "jason"}' # print(res,type(res)) # res1 = json.loads(res) # print(res1,type(res1)) # d = {"name":"jason"} # with open('userinfo','w',encoding='utf-8') as f: # json.dump(d,f) # 装字符串并自动写入文件 # with open('userinfo','r',encoding='utf-8') as f: # res = json.load(f) # print(res,type(res)) # # with open('userinfo','w',encoding='utf-8') as f: # json.dump(d,f) # 装字符串并自动写入文件 # json.dump(d,f) # 装字符串并自动写入文件 # with open('userinfo','r',encoding='utf-8') as f: # res1 = json.load(f) # 不能够多次反序列化 # res2 = json.load(f) # print(res1,type(res1)) # print(res2,type(res2)) # with open('userinfo','w',encoding='utf-8') as f: # json_str = json.dumps(d) # json_str1 = json.dumps(d) # f.write('%s '%json_str) # f.write('%s '%json_str1) # with open('userinfo','r',encoding='utf-8') as f: # for line in f: # res = json.loads(line) # print(res,type(res)) # t = (1,2,3,4) # print(json.dumps(t)) # d1 = {'name':'朱志坚'} # print(json.dumps(d1,ensure_ascii=False)) # pickle # import pickle # d = {'name':'jason'} # res = pickle.dumps(d) # 将对象直接转成二进制 # print(pickle.dumps(d)) # res1 = pickle.loads(res) # print(res1,type(res1)) """ 用pickle操作文件的时候 文件的打开模式必须是b模式 """ # with open('userinfo_1','wb') as f: # pickle.dump(d,f) # with open('userinfo_1','rb') as f: # res = pickle.load(f) # print(res,type(res))
subprocess模块
1.用户通过网络连接上了你的这台电脑
2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
3.获取用户命令 里面subprocess执行该用户命令
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'))