一、os模块
OS作为计算机系统资源的管理者 主要跟当前程序所在的操作系统打交道
| 基本格式 |
| import os |
| |
| os模块主要用来创建文件、目录、修改名字、删除文件、获取路径、判断是否时文件夹以及文件 |
1 os.mkdir()
和 os.makedirs()
创建目录(文件夹)
os.mkdir()
和 os.makedirs()
都可以创建单机目录
只有 os.makedirs()
可以创建单级目录和多级目录
1.mkdir()
可以创建单机目录
| import os |
| |
| os.mkdir(r'd1') |
| |
| os.mkdir(r'd2\d22\d222') |
2.makedirs()
可以创建单级目录和多级目录
| makedirs() |
| |
| os.makedirs(r'd2\d22\d222') |
| os.makedirs(r'd1') |
2 os.rmdir()
和 os.removedirs()
删除目录
os.rmdir()
可以删除单机目录
os.removedirs()
可以删除单级目录和多级目录
os.rmdir()
和 os.removedirs()
都只能删除空的单级目录
| 1.os.rmdir() 可以删除单机目录 |
| os.rmdir(r'd1') |
| os.rmdir(r'd2\d22\d222') |
| |
| 2.os.removedirs() 可以删除多级目录 |
| os.removedirs(r'd2\d22\d222\d2222') |
3 os.listdir()
列举内容名称
os.listdir()
列举指定路径下文件名称
| os.listdir() 隐藏文件也可以显示,默认是执行文件当前的路径下 |
| |
| print(os.listdir(r'/Users')) |
| print(os.listdir()) |
| ------------------------------------- |
| ['.localized', 'duoduo', 'Shared'] |
| ['sys模块.py', 'os模块.py', 'json 实战.py', 'a.txt', 'md1', 'json模块.py'] |
4 os.rename()
重命名文件和 os.remove()
删除文件
| 1.os.rename(A, B) 将 A文件 重命名为 B文件 |
| os.rename(r'a.txt'.r'aaa.txt') |
| |
| 2.os.remove(A) 将 A 文件删除 |
| os.remove(r'aaa.txt') |
5 os.getcwd()
获取当前工作目录 和os.chdir()
切换当前工作目录
1.os.getcwd()
获取当前目录
| os.getcwd() |
| print(os.getcwd()) |
| ------------------------------- |
| /Users/duoduo/pythonProject/python基础/day 10.20 |
2.os.chdir()
切换目录
| os.chdir() |
| |
| os.chdir('..') |
| |
| |
| os.mkdir(r'a.txt') |
| os.mkdir(r'b') |
| ------------------------------ |
| /Users/duoduo/pythonProject/python基础/a.txt |
| /Users/duoduo/pythonProject/python基础/b |
6 动态获取项目根路径***
os.path.abspath(__file__)
获取执行文件的绝对路径
os.path.dirname(__file__)
获取执行文件所在的目录路径
__file__
表示显示文件(执行文件)当前的位置
1.os.path.abspath(__file__)
获取执行文件的绝对路径
| os.path.abspath(__file__) |
| print(os.path.abspath(__file__)) |
| ------------------------------------ |
| /Users/duoduo/pythonProject/python基础/day 10.20/os模块.py |
2.os.path.dirname(__file__)
获取执行文件所在的目录路径
| os.path.dirname(__file__) |
| print(os.path.dirname(__file__)) |
| ------------------------------------ |
| /Users/duoduo/pythonProject/python基础/day 10.20 |
可以通过在启动文件中添加这两个获取路径来动态获取路径,当启动文件移动位置后也不会报错
7 判断路径(文件或者目录)是否存在
1.os.path.exists()
判断文件路径是否存在
| os.path.exists() 判断文件路径是否存在 |
| |
| print(os.path.exists(r'bbb.txt')) |
| print(os.path.exists(r'/Users/duoduo/pythonProject/python基础/day 10.20')) |
2.os.path.isfile()
如果path是一个存在的文件,返回True,否则返回False
| os.path.isfile() 如果path是一个存在的文件,返回True,否则返回False |
| |
| print(os.path.isfile(r'/Users/duoduo/pythonProject/python基础/day 10.20/json 实战.py')) |
| print(os.path.isfile(r'/Users/duoduo/pythonProject/python基础/day 10.19')) |
3.os.path.isdir()
判断路径是否有该目录
| os.path.isdir() 如果path是一个存在的目录,则返回True否则返回False |
| |
| print(os.path.isdir(r'/Users/duoduo/pythonProject/python基础/day 10.20/json 实战.py')) |
| print(os.path.isdir(r'/Users/duoduo/pythonProject/python基础/day 10.19')) |
8 os.path.join(路径1,路径2)
路径拼接
| """ |
| 设计到路径拼接一定不要自己做,因为不同的操作系统路径分隔符不一样 |
| """ |
| 1.os.path.join(路径1,路径2) |
| |
| s1 = r'/Users/duoduo/pythonProject/python基础/day 10.20' |
| s2 = r'sys模块.py' |
| |
| print(f'{s1}\{s2}') |
| |
| print(os.path.join(s1, s2)) |
| ------------------------------------- |
| /Users/duoduo/pythonProject/python基础/day 10.20\sys模块.py |
| /Users/duoduo/pythonProject/python基础/day 10.20/sys模块.py |
9 os.path.getsize()
| os.path.getsize() 获取文件大小 以字节为单位 |
| |
| print(os.path.getsize(r'/Users/duoduo/pythonProject/python基础/day 10.20/json模块.py')) |
| ---------------- |
| 583 |
二、sys模块
sys模块是与python解释器交互的一个接口
| |
| import sys |
| |
| sys模块主要是跟python解释器打交道 可以查看路径、解释器版本信息、平台信息、编码信息 |
1 sys.path
| sys.path 获取执行文件的 sys.path 系统环境变量 |
| |
| import sys |
| print(sys.path) |
2 sys.getrecursionlimit()
递归深度
| 1.sys.getrecursionlimit() 获取python解释器默认最大的递归深度 |
| |
| print(sys.getrecursionlimit()) |
| |
| |
| |
| 2.sys.setrecursionlimit() 修改最大递归深度 |
| |
| sys.setrecursionlimit(2000) |
| print(sys.getrecursionlimit()) |
| 1. sys.version |
| |
| print(sys.version) |
| ------------------------------------- |
| 3.9.6 (default, Aug 5 2022, 15:21:02) |
| [Clang 14.0.0 (clang-1400.0.29.102)] |
| |
| 2. sys.platform |
| |
| print(sys.platform) |
| ------------------------------------- |
| darwin |
4 sys.argv
| res = sys.argv 命令行参数List,第一个元素是程序本身路径 |
| |
| |
| 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模块
json模块也称为序列化模块,序列化可以打破语言限制实现不同编程语言之间数据交互
1 json格式数据为什么可以实现不同语言之间的交互
1.所有语言都认识json格式的数据(json格式数据都是字符串类型)
2.所有语言对应json格式都有对应的数据类型可以对上
2 json格式数据的作用:
1.转换格式
2.作数据交互
3 json格式数据的特征
1 json格式的数据都是字符串
2 且字符串中的引号都是双引号()
| |
| import json |
| |
| info_dict = {'name': 'jason', 'pwd': 123} |
| json_str = json.dumps(info_dict) |
| print(json_str,type(json_str)) |
| ------------------------------- |
| {"name": "jason", "pwd": 123} <class 'str'> |
4 json相关操作
1.针对数据 dumps loads
1.1 json.dumps()
| json.dumps() 序列化:将其他数据类型>转换成>json格式字符串 |
| |
| |
| import json |
| |
| info_dict = {'name': 'jason', 'pwd': 123} |
| json_str = json.dumps(info_dict) |
| print(json_str,type(json_str)) |
| --------------------------------- |
| {"name": "jason", "pwd": 123} <class 'str'> |
1.2 json.dumps()
| json.loads() 反序列化:json格式字符串>转换成>数据类型 |
| |
| |
| import json |
| |
| info_dict = {'name': 'jason', 'pwd': 123} |
| json_str = json.dumps(info_dict) |
| |
| dict_d1 = json.loads(json_str) |
| print(dict_d1,type(dict_d1)) |
| --------------------------------- |
| {'name': 'jason', 'pwd': 123} <class 'dict'> |
| import json |
| |
| user_dict = {'name': 'jason', 'pwd': 123} |
| '''将字典写入文件并且取出之后还是字典''' |
| |
| with open(r'a.txt', 'w', encoding='utf8') as f: |
| json_str = json.dumps(user_dict) |
| f.write(json_str) |
| print(json_str, type(json_str)) |
| |
| with open(r'a.txt', 'r', encoding='utf8') as f: |
| json_str = f.read() |
| json_dict = json.loads(json_str) |
| print(json_str,type(json_dict)) |
| |
| {"name": "jason", "pwd": 123} <class 'str'> |
| {"name": "jason", "pwd": 123} <class 'dict'> |
2.针对文件 dump load
| 1. json.dump() dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 |
| |
| 2. json.load() load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 |
| import json |
| |
| user_dict = {'name': 'duo', 'pwd': 999} |
| '''将字典写入文件并且取出之后还是字典''' |
| |
| with open(r'a.txt', 'w', encoding='utf8') as f: |
| |
| |
| |
| json.dump(user_dict, f) |
| |
| with open(r'a.txt', 'r', encoding='utf8') as f: |
| |
| |
| |
| res = json.load(f) |
| print(res) |
| |
| -----------a.txt中的数据------------ |
| {"name": "duo", "pwd": 999} |
5.json实战
| 用户登录注册功能 |
| import os |
| import json |
| |
| |
| |
| base_dir = os.path.dirname(__file__) |
| |
| db_dir = os.path.join(base_dir, 'db') |
| |
| if not os.path.isdir(db_dir): |
| os.mkdir(db_dir) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| username = input('username>>>:').strip() |
| |
| 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() |
| |
| 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 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY