day 21(os json)

昨日内容回顾

re模块方法补充

'findall系列方法分组优先机制·
findall('a(b)c','asdfghjkl')  打印结果只会展示括号里边的b
当然我们自己写的代码我们也可以用代码来取消就是  ?:  用这两个  问好加冒号
正则表达式起别名
(只要用于search与match中)
search('a(?P<name1>b)(?P<name2>c)','abcabcabcabc')

collections模块

提供一些特殊数据类型
1.具名元组
2.双端队列
3.有序字典、默认值字典
4.计数器

tinme模块

'时间的三种表示格式
1.时间戳
2.结构化时间
3.格式化时间
'常规的操作
time.time()
time.localtime()
time.strftime()
%Y%m%d  %H%M%S%X
'时间格式转换
时间戳   结构化时间
格式化时间
time.strptime('时间','时间格式')

datetime模块

常规常见的一些操作
detetime.datetime.tody()
年月日时分秒
datetime.date.tody()
'年月日'
时间差值
'datetime.timedelta()
'时间对象=日期对象+/-timedelta对象
'timedelta对象=日期1对象+/-日期对象

random模块

# 随机数模块
random.random()  '''0到1之间的小数'''
random.uniform()  '''指定区间的小数'''
random.randint()  '''指定区间的整数(掷骰子)'''
random.choice()  '''随机抽取一个(抽奖)'''
random.sample()  '''随机抽样(可以自定义个数)'''
random.shuffle()  '''随机打乱数据集合(洗牌)'''

random     0~1之间的整数
uniform    可以指定它产生几和几之间的小数
randint       指定区间的整数
choice          随机获取一个
shuffle         随机抽取指定数据

迷人的大作业

今日内容详细

这种题一定要有一个思路、、、、基础知识逻辑思维要比较扎实、、、
# import random
# def get_code(n):
#     code=''
#     for i in range(n):
#         random_int= str (random.randint(0,9))
#         random_lower= chr(random.randint(97,122))
#         random_upper=chr(random.randint(65,90))
#         temp=random.choice([random_upper,random_int,random_lower])
#         code+=temp
#     return code
# res=get_code(4)
# print(res)
import random


def get_code(n):
    # 定义一个空字符用于存储验证码
    code = ''
    # 1.先写一个固定产生五位的随机验证码(每一位都应该是三选一)
    for i in range(n):  # 括号内写几就会产生几位验证码
        # 随机产生一个数字
        random_int = str(random.randint(0, 9))  # 整型无法与字符串相加 所以转成字符串
        # 随机产生一个小写字母
        random_lower = chr(random.randint(97, 122))  # chr方法给数字 依据ASCII码返回对应的字符
        # 随机产生一个大写字母
        random_upper = chr(random.randint(65, 90))
        # 三选一
        temp = random.choice([random_int, random_lower, random_upper])
        # 拼接字符串
        code += temp
    # print(code)  # 最好不要是打印操作 而是返回值
    return code


res = get_code(4)  # 0xM0
res1 = get_code(10)  # AoUWE4Kfqt

os模块

在这里插入图片描述

该模块主要跟操作系统打交道
import os
# os.mkdir(r'aaa')#使用相对路径 在当前执行文件所在的路径下创建一个aaa文件夹
# os.makedirs(r'ccc')makedirs可以创建单级目录
# os.makedirs(r'bbb/ccc/ddd')#makedirs支持创建多级目录
# 删除目录 (文件夹)
# os.rmdir(r'aaa')  删除aaa这个文件  单机目录
# os.rmdir(r'bbb')    只能删除空的  目标目录不是空的所以无法删除
# os.removedirs(r'ccc')     可以删除单级目录

# os.removedirs(r'D:\python111\bbb\ccc\ddd\eee')   删除目录之后如果外层的目录也是空的则继续删除  如果不是则会停在不是空的
# print(os.listdir())  )
# print(os.listdir(r'D:\python111\bbb\ccc')) 3.查看某个路径下所有的文件名称(文件、文件夹
# os.remove(r'a.txt')   删除文件  重命名文件
# os.rename(r'1.txt',r'666.txt')
#5.获取当前路径、切换路径
# os.chdir(r'D:\python111\bbb')
# print(os.getcwd())  获取当前路径
# os.path.dirname(__file__)动态获取当前执行文件所在的绝对路径
# os.path.dirname(os.path.dirname(__file__))每嵌套一层就是往上切换一层
# print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径
# 7.判断文件是否存在
# print(os.path.exists(r'aaa'))  True  如果不存在就返回False
# print(os.path.isdir(r'zqhA1.py'))  False   如果不是文件夹  就返回False
# a='ATM'
# b='zqh66.py'
# print(a+'/'+b)# 路径分隔符在不同的系统下是不一样的  使用加号的话兼容性极差
# res=os.path.join(a,b)
# print(res)能够自动识别当前操作系统的分隔符
# 9.获取文件大小(字节  bytes)
print(os.path.getsize(r'ATM'))
print(os.path.getsize(r'666.txt'))

小练习

# 选择指定文件并打开浏览(目前只考虑文本文件即可)

# 展示某个文件下所有的文件名称 用户选择哪个就打开哪个import os

# 1.先获取目标文件路径(动态获取 也可以省事先写死)
target_path = os.path.dirname(__file__)
full_path = os.path.join(target_path, '好看的合集')
# 2.列举该路径下所有的文件名称
file_name_list = os.listdir(full_path)
print(os.listdir(full_path))# ['','','','']
# while True:
#     # 3.循环展示每个文件名称
#     for i, j in enumerate(file_name_list, start=1):
#         print(i, j)
#     # 4.获取用户选择的编号
#     target_num = input('请输入您想要查看的文件编号>>>:').strip()
#     # 5.判断是否是纯数字
#     if target_num.isdigit():
#         # 6.如果是纯数字 转换成整型
#         target_num = int(target_num)
#         # 7.判断数字在不在数量范围内
#         if target_num in range(1, len(file_name_list) + 1):
#             # 8.获取文件名称
#             file_name = file_name_list[target_num - 1]
#             # 9.拼接完整路径
#             full_file_path = os.path.join(full_path, file_name)
#             # 10.文件操作打开文件
#             with open(full_file_path, 'r', encoding='utf8') as f:
#                 print(f.read())
#         else:
#             print('没有该编号的文件')
#     else:
#         print('编号只能是数字')

import os

# 1.先获取目标文件路径(动态获取 也可以省事先写死)
target_path = os.path.dirname(__file__)
full_path = os.path.join(target_path, '好看的合集')
# 2.列举该路径下所有的文件名称
file_name_list = os.listdir(full_path)
print(os.listdir(full_path))# ['','','','']
# while True:
#     # 3.循环展示每个文件名称
#     for i, j in enumerate(file_name_list, start=1):
#         print(i, j)
#     # 4.获取用户选择的编号
#     target_num = input('请输入您想要查看的文件编号>>>:').strip()
#     # 5.判断是否是纯数字
#     if target_num.isdigit():
#         # 6.如果是纯数字 转换成整型
#         target_num = int(target_num)
#         # 7.判断数字在不在数量范围内
#         if target_num in range(1, len(file_name_list) + 1):
#             # 8.获取文件名称
#             file_name = file_name_list[target_num - 1]
#             # 9.拼接完整路径
#             full_file_path = os.path.join(full_path, file_name)
#             # 10.文件操作打开文件
#             with open(full_file_path, 'r', encoding='utf8') as f:
#                 print(f.read())
#         else:
#             print('没有该编号的文件')
#     else:
#         print('编号只能是数字')

sys模块

python、解释器打交道
import sys# 1.列举当前执行文件所在的sys.path(掌握)# print(sys.path)# 2.获取解释器版本信息(了解)# print(sys.version)# 3.获取平台信息(了解)# print(sys.platform)# 4.自定义命令行操作# print(sys.argv)"""cmd终端可以使用windows+r并输入cmd唤起也可以在pycharm直接使用快捷方式Terminal    模拟cmd并自动切换到当前执行文件所在的路径下"""# if len(sys.argv) == 3:  # 这里的判断也可以变成异常捕获的形式#     username = sys.argv[1]#     password = sys.argv[2]#     if username == 'jason' and password == '123':#         print('可以正常执行该文件')#     else:#         print('用户名或密码错误 没有该文件的执行权限')# else:#     print('请输入用户名和密码 不能漏写或多写')​​try:    username = sys.argv[1]    password = sys.argv[2]except Exception:    print('请输入用户名和密码')else:    if username == 'jason' and password == '123':        print('可以正常执行该文件')    else:        print('用户名或密码错误 没有该文件的执行权限')

json模块

因为两门不同的语言无法交互所以就出现了  json格式数据
通过json格式数据达到两边都能听懂的效果
或者说两边都能理解的效果
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成
'''json是一个序列化模块 主要用于跨语言传输数据''
json格式数据的具体特征
	结论1中有一个小细节>>>:数据基于网络传输肯定是二进制格式
  在python中bytes类型的数据可以直接看成是二级制数据
  	python中哪些数据可以转成bytes类型(编码encode())
    	只有字符串可以!!!
数据基于网络传输绝对是数据类型  
只有字符串可以调编码解码!! 
json格式数据本质属于字符串类型  因为这样才可以编码解码 
import json
d={'username':'jason','pwd':123}
print(d,type(d))
res=json.dumps(d)  #用这个方法改成字符串 双引号是json独有的特征
print(res,type(res))  符合两个条件里面全部是字符串加双引号
import json
# d = {'username':'jason','pwd':123}
# print(d, type(d))  # {'username': 'jason', 'pwd': 123} <class 'dict'>
# res = json.dumps(d)
# print(res, type(res))  # {"username": "jason", "pwd": 123} <class 'str'>
# print(str(d),type(str(d)))  # {'username': 'jason', 'pwd': 123} <class 'str'>
'''双引号是json格式数据独有的标志符号'''
# d = {"username":"jason","pwd":123}
# print(d)  # {'username': 'jason', 'pwd': 123}  不是
res1 = '{"username":"jason","pwd":123}'
print(res1)  # {"username":"jason","pwd":123}  算json格式

具体操作

# d = {'username':'jason','pwd':123}
# res = json.dumps(d)
# print(res, type(res))  # json格式字符串
# encode_str = res.encode('utf8')
'''假设将该字符串基于网络发给了另外一个python程序'''
# 先将bytes类型转换成字符串
# json_str = encode_str.decode('utf8')
# print(json_str,type(json_str))
# res1 = json.loads(json_str)
# print(res1, type(res1))  # {'username': 'jason', 'pwd': 123} <class 'dict'>
"""
json.dumps()        序列化
    将python数据类型转换成json格式字符串
json.loads()        反序列化
    将json格式字符串转换成对应的数据类型
"""

# 如果不能理解跨语言传输的作用 那么权且理解下面的操作即可
d = {'username': 'jason', 'pwd': 123}
# 将上述字典写入文件
with open(r'a.txt','w',encoding='utf8') as f:
    # f.write(d)
    # f.write(str(d))
    # f.write(json.dumps(d))
    json.dump(d, f)
# 将文件内容获取出来
with open(r'a.txt','r',encoding='utf8') as f:
    # data = f.read()
    # res = json.loads(data)
    # print(res, type(res))
    data = json.load(f)
    print(data, type(data))
"""
如果json模块需要配合文件一起使用的话 有固定的方法
json.dump()
    将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
    将文件数据直接转成对应的数据类型(自动反序列化)
"""

# 强调:不是所有的数据类型都支持序列化
"""
    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+
"""
import json
# 
# d = {'username': 'jason', 'pwd': 123}
# with open(r'666.txt', 'w', encoding='utf8') as f:
#     # f.write(str(d))
#     # f.write(json.dumps(d))
#     json.dump(d,f)
# 
# with open(r'666.txt', 'r', encoding='utf8') as f:
#     # data = f.read()
#     # res = json.loads(data)
#       res=json.load(f)
# print(res, type(res))

subprocess模块

import subprocess

# ls在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('ls',
                       shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE
                       )
print('stdout',res.stdout.read().decode('utf8'))  # 获取正确命令执行之后的结果
print('stderr',res.stderr.read().decode('utf8'))  # 获取错误命令执行之后的结果
"""
该模块可以实现远程操作其他计算机的功能
    动态获取命令执行并返回结果
        eg:类似于Xshell软件的功能
"""

posted @   文质彬彬赵其辉  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示