python day16

python day16,第1张

概述今日内容:   collectiont模块\\time模块\\datetime模块\\os模块\\random模块\\json模块\\pickle模块\\subprocess模块 待补充 :hashlib模块(加密模块)\\包\\logging模块\\configpaese模块\\openpyxl模块   collectiont模块:     namedtuple:具名元祖:   举例:想表示坐标 今日内容:  

collectiont模块\time模块\datetime模块\os模块\random模块\Json模块\pickle模块\subprocess模块

待补充 :hashlib模块(加密模块)\包\logging模块\configpaese模块\openpyxl模块

 

collectiont模块:     namedtuple:具名元祖:  

举例:想表示坐标点x为1 y为2的坐标

from collections import namedtuplepoint = namedtuple(坐标,[x,y,z])  # 第二个参数既可以传可迭代对象point = namedtuple(坐标,x,y,z)  # 也可以传字符串.但是字符串之间以空格隔开p = point(1,2,5)  # 注意元素的个数必须跟namedtuple第二个参数里面的值数量一致print(p,z)print(p,x)print(p,y)card = namedtuple(扑克牌,color number)card1 = namedtuple(扑克牌,[color,number])A = card(,A)print(A)print(A.color)print(A.number)city = namedtuple(日本,name person size)c = city(东京,R老师,L)print(c)print(c.name)print(c.person)print(c.size)
collections与namedtuple的应用 deque双端队列:  

队列: 先进先出(FIFO first in first out)

import queueq = queue.Queue()  # 生成队列对象q.put(first)  # 往队列中添加值q.put(second)q.put(third)print(q.get())  # firstprint(q.get())  # secondprint(q.get())  # thirdprint(q.get())  # 朝队列要值,如果队列中的值取完了,程序会在原地等待,直到从队列中拿到值

collections与deque的应用

from collertions import dequeq = deque([a,b,c])‘‘‘append在右边插入appendleft在左边插入pop从右边d出popleft从左边d出‘‘‘q.append(1)q.appendleft(2)print(q.pop())  # 1print(q.popleft())  # 2‘‘‘队列不应该支持任意位置插值只能在首位插值(不能插队)‘‘‘q.insert(1,哈哈哈)  # 特殊点:双端队列可以根据索引在任意位置插值print(q.pop())  # 1print(q.popleft())  # 哈哈哈print(q.popleft())  # 2
collections与deque的应用 OrderedDict有序字典:  
normal_d = dict([(a,1),(b,2),(c,3)])print(normal_d)  # {‘a‘: 1,‘b‘: 2,‘c‘: 3}from collections import OrderedDictorder_d = OrderedDict([(a,3)])order_d1 = OrderedDict()order_d1[x] = 1order_d1[y] = 2order_d1[z] = 3print(order_d1)  # OrderedDict([(‘x‘,(‘y‘,(‘z‘,3)])for i in order_d1:    print(i)  # x,zprint(order_d)  # OrderedDict([(‘a‘,(‘b‘,(‘c‘,3)])
defaultdict默认值字典:  
from collections import defaultdictvalues = [11,22,33,44,55,66,77,88,99,900]my_dict = defaultdict(List)  # 后续该字典中新建的key对应的value默认就是列表for value in values:    if value > 66:        my_dict[k1].append(value)    else:        my_dict[k2].append(value)print(my_dict)  # defaultdict(<class ‘List‘>,{‘k2‘: [11,66],‘k1‘: [77,900]})

如果指定用int类型返回值,又选择字典中不存在的key值:

my_dict1 = defaultdict(int)print(my_dict1[xxx])  # 0print(my_dict1[yyy])  # 0

如果指定用bool类型返回值,又选择字典中不存在的key值:

?my_dict2 = defaultdict(bool)print(my_dict2[xxx])  # False
counter:计数器
from collections import Counters = abcdeabcdabcaba‘‘‘
如果不想用模块的知识点

思路:先循环当前字符串,将每一个字符串都采用字典新建键值对的范式 d ={} for i in s: d[i] = 0 ... print(d)
‘‘‘res = Counter(s)print(res)

 

time时间模块:     time:   time有三种表现形式:

1.时间戳 Timestamp

import timeprint(time.time())  # 与unix元年相距多少秒

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

import timeprint(time.strftime(%Y-%m-%d))    # 2019-07-18print(time.strftime(%Y-%m-%d %H:%M:%s))  # 2019-07-18 11:25:30print(time.strftime(%Y-%m-%d %X))  # 2019-07-18 11:25:30,即%X等价于%H:%M:%s

3.结构化时间 struct_time

import time    print(time.localtime())        
三者之间的结构关系(图):

# 下面的代码主要是展示它们之间的区别print(time.time())print(time.mktime(res))print(time.strftime(%Y-%m,time.localtime()))print(time.strptime(time.strftime(%Y-%m,time.localtime()),%Y-%m))
time三种表现形式之间的关系 datetime:  
import datetimeprint(datetime.date.today())  # date>>>:年月日print(datetime.datetime.today())  # datetime>>>:年月日 时分秒res = datetime.date.today()res1 = datetime.datetime.today()print(res.year)  # 返回结果为:2019print(res.month)  # 返回结果为:7print(res.day)  # 返回结果为:18print(res.weekday)  # <built-in method weekday of datetime.date object at 0x000001D48DC07B70>print(res.weekday())  # 返回结果为:3,若0~6表示星期,则0表示周一;若1~7表示星期,则7就是周日
拓展:timetel_ttimedelta
current_time = datetime.date.today()  # 日期对象timetel_t = datetime.timedelta(days=7)  # timedelta对象res1 = current_time+timetel_t   # 日期对象print(current_time-timetel_t)print(res1-current_time)

关键点:

日期对象 = 日期对象 +/- timedelta对象 timedelta对象 = 日期对象 +/- 日期对象 举例:计算今天举例今年过生日还有多少天
# 只显示年月日birth = datetime.date(2019,12,21)current_time = datetime.date.today()print(birth-current_time)  # 显示年月日# 若想显示时分秒?birth = datetime.datetime(2019,21,8,8)current_time = datetime.datetime.today()print(birth-current_time)  # 显示年月日 时分秒
了解知识点:UTC时间
dt_today = datetime.datetime.today()dt_Now = datetime.datetime.Now()dt_utcNow = datetime.datetime.utcNow()print(dt_utcNow,dt_Now,dt_today)  # 2019-07-18 09:56:36.925833 2019-07-18 17:56:36.925833 2019-07-18 17:56:36.925833

 

random模块:  

关于random模块中的各种方法:

import randomprint(random.randint(1,6))  # 随机取一个你提供的整数范围内的数字,包含首尾print(random.random())  # 随机取0~1之间的小数print(random.choice([1,3,4,5,6]))  # 随机摇号,从列表中取元素?res = [1,6]random.shuffle(res)  # 洗牌,打乱有序(列表)print(res)
举例:生成5位数的随机验证码(大写字母,小写字母,数字等等)

需求提示:chr与random.choice,且封装成一个函数,用户想生成几位就生成几位

import randomdef get_code(n)    code =      for i in range(n):        # 先生成随机的大写母子,数字        upper_str = chr(random.ranint(65,90))        lower_str = chr(random.ranint(97,122))        random_int = str(random.randomint(0,9))        # 从上面三段代码中随机选择一个作为随机验证码的某一位        code += random.choice([upper_str,lower_str,random.int])    return code  # 返回的是随机生成的验证码res = get_code(4)print(res)

 

os模块:  

定义:跟 *** 作系统打交道的模块

下面介绍一些os模块中的方法:

import osBASE_DIR = os.path.dirname(__file__)MOVIE_DIR = os.path.join(BASE_DIR,老师们的作品)movIE_List = os.Listdir(MOVIE_DIR)print(os.Listdir(rcopy_pyth))  # 将文件夹中所有文件名以列表形式打印出来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(rcopy_path))  # 判断文件是否存在print(os.path.isfile(rcopy_path))  # 只能判断文件,无法判断文件夹?os.rmdir(rcopy_path)  # 只能删空文件夹?print(os.getcwd())  # 查看当前目录print(os.chdir(rcopy_path))  # 切换当前所在的目录?# 获取文件大小print(os.path.getsize(rcopy_path))  # 打印字节大小with open(rcopy_path,enCoding=utf-8) as f:    print(len(f.read()))

 

sys模块:  

定义:跟python解释器打交道的模块

import syssys.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(用户不存在,无法执行当前文件)

 

序列化模块:  

序列:字符串

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

写入文件的数据必须是字符串 基于网络传输的数据必须是二进制(str.encode())

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

Json模块:  

优缺点:

优点:所有的语言都支持Json格式 缺点:但是支持的数据类型很少,有 字符串,列表,字典,整型,元祖(转为列表),bool值

内置的方法:

dumps :序列化,将其他格式数据类型转成Json格式的字符串 dump loads :反序列化,将Json格式的字符串转成其他格式的数据类型 load

小技巧:加s的传入文件,不加s的不传文件

import Json?d = {name:jason}res = Json.dumps(d)  # {"name":"jason"} Json格式的字符串,必须是双引号print(res,type(res))  # <class ‘str‘>res1 = Json.loads(res)  # {‘name‘:‘jason‘}print(res1,type(res1))  # <class ‘dict‘> ?# 写入文件d = {"name":"jason"}with open(userinfo,w,enCoding=utf-8) as f:    # 先转字符串并自动写入文件    Json.dump(d,f)  # 若直接写Json.dump(d)则报错# 读取文件    d = {"name":"jason"}with open(userinfo,r,enCoding=utf-8) as f:    res = Json.load(f)    print(res,type(res))  # {‘name‘:‘jason‘} <class ‘dict‘>
如果进行多次反序列化 *** 作后: 
# 失败案例:with open(userinfo,enCoding=utf-8) as f:    Json.dump(d,f)    Json.dump(d,f)   with open(userinfo,enCoding=utf-8) as f:    res = Json.load(f)  # 不能够多次反序列化    res1 = Json.load(f)    print(res,type(res))    print(res1,type(res1))    # 直接报错
反之:
# 成功案例:   with open(userinfo,enCoding=utf-8) as f:    Json_str = Json.dumps(d)    Json_str1 = Json.dumps(d)    f.write(%s\n%Json_str)    f.write(%s\n%Json_str1)with open(userinfo,enCoding=utf-8) as f:    for line in f:        res = Json.loads(line)        print(res,type(res))
关于dumps方法的一些运用:       
import Jsont = (1,4)print(Json.dumps(t))  # [1,4]?d1 = {name:朱质健}print(Json.dumps(d1))  # {"name": "\u6731\u8d28\u5065"}d1 = {name:朱质健}# 避免结果被转码print(Json.dumps(d1,ensure_ascii=False))  # {"name": "朱质健"}

 

pickle模块:  

优缺点:

优点:只支持python语言 缺点:但是支持python所有的数据类型

注意点:用pickle *** 作文件时,文件的打开模式必须是b模式

import pickled = {name:jason}res = pickle.dumps(d)  # 将对象直接转成二进制print(pickle.dumps(d))  # 二进制模式代码res1 = pickle.loads(res)print(pickle.loads(res),type(res))  # {‘name‘:‘jason‘} <class ‘dict‘>

?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模块:  

sub :子  process :进程

 

PS :终端内输入taskList可查看进程详细信息的二进制码展示

subprocess内置的方法:

stdout :正确命令返回的结果 stderr :错误命令返回的提示信息

应用场景:远程运维/ *** 控

 

关于远程运维/ *** 控:

1.用户通过网络连接上了你的这台电脑 2.用户输入相应的命令,基于网络发送给了你这台电脑上某个程序 3.获取用户命令,里面subprocess执行该用户命令 4.将执行结果再基于网络发送给用户

最终就能实现,用户远程 *** 控你这台电脑的 *** 作!!!

终端使用taskList命令,并且使其转化为常用数据类型以展示:

while True:    cmd = input(cmd>>>:).strip()    import subprocess    obj = subprocess.Popen(taskList,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) print(正确命令返回的结果stdout,obj.stdout.read().decode(GBK))    print(错误命令返回的提示信息stderr,obj.stderr.read().decode(GBK))
总结

以上是内存溢出为你收集整理的python day16全部内容,希望文章能够帮你解决python day16所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存