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软件的功能
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下