常用内置模块os sys json
今日内容回顾
- os模块
- sys模块
- json模块
os模块
os模块主要与代码运行的操作系统打交道
1、创建目录(文件夹)
import os
os.mkdir(r'b') # 相对路径 在执行文件所在的路径创建目录
os.mkdir(r'b\bb\bbb') # 无法创建多级目录
os.makedirs(r'b\bb\bbb') # 可以创建多级目录
os.makedirs(r'b1') # 也可以创建单级目录
2、删除目录(文件夹)
os.rmdir(r'b1') # 可以删除单级目录(只能删空的单级目录)
os.rmdir(r'a\aa\aaa') # 无法一次性删除多级目录 这里删的只是aaa
os.removedirs(r'a\aa') # 可以一次性删除多级目录(但只能删空的多级目录) 也能删单级
3、列举指定路径下内容名称
# 可以指定查找路径下的内容名称
print(os.listdir()) # 显示的是依据当前执行文件所在位置下的内容名称
print(os.listdir(r'D:\\')) # 显示的是D盘根目录下的内容名称
4、删除\重命名文件
os.rename(r'a.txt', r'p.txt') # 重命名文件
os.remove(r'p.txt') # 删除文件
5、获取/切换当前工作目录
print(os.getcwd()) # 获取当前所在的工作目录 D:\py20\day19
os.chdir('..') # 切换到上一级目录
print(os.getcwd()) # D:\py20
6、动态获取项目根路径(重要)
print(os.path.abspath(__file__)) # 获取执行文件的绝对路径 D:\py20\day19\a.py
print(os.path.dirname(__file__)) # 获取执行文件所在的目录路径 D:/py20/day19
7、判断路径是否存在(文件、目录)
print(os.path.exists(r'yoyo.py')) # 判断文件路径是否存在 True 同样依据执行文件所在位置判断在与不在
print(os,path.exists(r'D:\py20\day19')) # 判断任意目录是否存在 True
print(os.path.isfile(r'D:\py20\day19\a.py')) # 判断路径下是否是是文件 True
print(os.path.isfile(r'a.py')) # True
print(os.path.isfile(r'yoyo.py')) # False
print(os.path.isfile(r'D:\py20\day19')) # False
print(os.path.isdir(r'a.py')) # False 判断目录下是否存在文件
print(os.path.isdir(r'D:\py20\day19')) # True
print(os.path.isdir(r'D:\py20\day19\bin')) # True
8、路径拼接(重要)
a1 = r'D:\py20\day19'
a2 = r'a.py'
错误做法:print(f'{a1}\{a2}')
涉及到路径拼接一定不要自己拼接 因为不同的操作系统路径分隔符不一样
print(os.path.join(a1, a2)) # D:\py20\day19\a.py 使用模块拼接的话会自动转不同的操作系统路径的分隔符
9、获取文件大小(字节)
print(os.path.getsize(r'a.py')) # 785字节 是以字节为单位
sys模块
sys模块主要与python解释器打交道
import sys
print(sys.path) # 获取执行文件的sys.path
print(sys.getrecursionlimit()) # 获取python解释器默认最大递归深度
sys.setrecursionlimit(3000) # 修改python解释器默认最大递归深度
print(sys.version) # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)] # 获取解释器的版本
# print(sys.platform) # 平台信息 win32(了解即可)
# 下列是用在cmd命令窗口中
res = sys.argv
if len(res) != 3:
print('执行命令缺少了用户名或密码')
else:
username = res[1]
password = res[2]
if username == 'jason' and password == '123':
print('jason您好 文件正常执行')
else:
print('您不是jason无权执行该文件')
json模块
何为jason模块
# jason模块也称序列化模块 序列化可以打破语言的限制实现不同编程语言之间数据交互
jason格式数据的作用
json格式数据的形式
特殊的字符串类型并且引号都是双引号
d = {'name': 'jason', 'age': 18, 'hobby': 'read'}
print(d, type(d)) # {'name': 'jason', 'age': 18, 'hobby': 'read'} <class 'dict'>
import json
res = json.dumps(d)
print(res, type(res)) # {"name": "jason", "age": 18, "hobby": "read"} <class 'str'>
json相关操作
# 针对数据
json.dumps() 序列化:将某一数据类型转化成json格式字符串
json.loads() 反序列化:json格式字符串转化成某一个编程语言对应的数据类型
# 针对文件
json.dump() 将某一数据类型转化成json格式字符串写入文件 必须要有一个文件对象
json.load() 读取文件中json格式数据并反序列化成数据类型
json.dumps() 序列化
json.loads() 反序列化
user_dic = {'name': 'jason', 'hobby': 'read'}
'将字典写入文件并且取出来之后还是字典'
with open(r'b.txt', 'w', encoding='utf8') as f:
# json_str = json.dumps(user_dic) # 序列化:数据类型转化成json格式字符串
# f.write(json_info)
json.dump(user_dic, f) # 将数据序列化并写入文件:就是将字典转化成json字符串写入到文件里面去
with open(r'b.txt', 'r', encoding='utf8') as f1:
# json_data = f1.read()
# json_dict = json.loads(json_data) # 反序列化:json格式字符串转化成某一个编程语言对应的数据类型
# print(json_dict, type(json_dict))
res = json.load(f1) # 自动读取文件中json格式数据并反序列化成数据类型
print(res, type(res))
json模块实战
用户登录注册功能
import os
import json
# 注册功能
# 1.获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__) # D:/pythonProject03/day19
# 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db') # D:/pythonProject03/day19/db
# 3.创建db目录
if not os.path.isdir(db_dir):
os.mkdir(db_dir)
# 4.获取用户数据
# username = input('username>>>:').strip()
# password = input('password>>>:').strip()
# 4.1.判断用户名是否已存在
# print(os.listdir(db_dir)) # ['jason.json', 'kevin.json', 'tony.json'] 方式1
# user_file_path = os.path.join(db_dir, f'{username}.json') 方式2
# 5.构造用户字典
# user_dict = {
# 'username': username,
# 'password': password,
# 'account': 15000, # 账户余额
# 'shop_car': [] # 购物车
# }
# 6.拼接存储用户数据的文件路径
# user_file_path = os.path.join(db_dir, f'{username}.json') # D:/pythonProject03/day19/db/jason.json
# 7.写入文件数据
# with open(user_file_path,'w',encoding='utf8') as f:
# json.dump(user_dict, f)
username = input('username>>>:').strip()
# 1.拼接上述用户名组成的文件路径
target_user_file_path = os.path.join(db_dir, f'{username}.json')
if not os.path.isfile(target_user_file_path):
print('用户名错误')
else:
password = input('password>>>:').strip()
# 2.获取用户真实数据字典
with open(target_user_file_path,'r',encoding='utf8') as f:
real_user_dict = json.load(f)
if password == real_user_dict.get('password'):
print('登录成功')
else:
print('密码错误')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!