os,sys,json模块
OS 模块
os模块主要用于与代码所在的操作系统沟通。
句式:
import os
通过os.的方法使用
os 有很多功能,在我们使用的时候能给我们带来更加方便,自动化的体验感。
创建目录
分为两种,创建单级目录和创建多级目录
mkdir # 创建单级目录/不可以创建多级目录
os.mkdir(r'文件名') # 在执行文件的路径下创建单级目录
makedirs # 创建多级目录同时也可以创建单级目录
os.makedirs(r'a1\a22\a33') # a1 一级目录 a22 二级 a33 三级
删除目录
rmdir # 删除单级目录(空的)/不可删除多级目录
os.rmdir(r'a1') # 在执行文件目录下删除a1
removedirs # 可以删除多级目录(只能删除空的)
os.removedirs(r'a1\a22\a33')
列举指定路径下内容名称
listdir # 列举指定路径下内容名称
print(os.listdir()) # 列举当前执行文件目录下名称
print(os.listdir(r'D:\\')) # 指定D盘目录下所有内容名称
删除/重命名文件
rename # 重命名文件
os.rename(r'a.txt','aaa.txt') # 把文件a.txt更名为aaa.txt
remove # 删除文件
os.remove(r'aaa.txt') # 删除文件aaa.txt
获取/切换当前工作目录
getcwd # 获取当前工作目录路径
print(os.getcwd()) # D:\pythonProject\day16 当前目录
chdir # 切换目录
os.chdir('..') # .. 代表上层路径 切换到上层路径
print(os.getcwd()) # D:\pythonProject
动态获取项目根路径 ******
os.path.abspath(__file__) # 获取执行文件的绝对路径
print(os.path.abspath(__file__)) # D:\pythonProject\day16\练习.py
os.path.dirname(__file__) # 获取执行文件所在目录路径
print(os.path.dirname(__file__)) # D:/pythonProject/day16
# 可以嵌套一层获取上层目录
print(os.path.dirname(os.path.dirname(__file__))) # D:/pythonProject
判断路径是否存在文件
path.exists # 判断文件路径是否存在
print(os.path.exists(r'练习.py')) # True 可以根据文件名判断
也可以用来判断目录是否存在
print(os.path.exists(r'D:\pythonProject\day16')) # True
path.lsfile # 判断路径是否是文件
print(os.path.isfile(r'练习.py')) # True 根据文件名判断
也可以用来判断 路径是否是文件
print(os.path.isfile(r'D:\pythonProject\day16')) # False
isdir # 判断是否是目录。 以布尔值返回
print(os.path.isdir(r'D:\pythonProject\day16')) # True
print(os.path.isdir(r'复习.py')) # False
路径拼接 ******
path.join # 把两个目录拼接
a1 = r'D:\pythonProject\day16'
a2 = r'练习.py'
print(os.path.join(a1, a2)) # D:\pythonProject\day16\练习.py
可以兼容各个系统的分隔符。
获取文件大小(以字节为单位)
path.getsize
print(os.path.getsize(r'文件名')) # 可以把该文件内的内容以字节为单位 返回结果
sys模块
import sys
主要用于跟python解释器打交道
获取执行文件sys.path:
print(sys.path) # 太长了,不复制了
当前目录增加路径:
sys.path.append(r'D:\pythonProject\day16\my')
获取当前python解释器的最大递归深度
print(sys.getrecursionlimit()) # 1000
修改最大递归深度:
sys.setrecursionlimit(2000)
获取当前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)
"""
cmd终端可以使用windows+r并输入cmd唤起
也可以在pycharm直接使用快捷方式Terminal
模拟cmd并自动切换到当前执行文件所在的路径下
"""
import sys
res = sys.argv
if len(res) != 3:
print('执行命令缺少了用户名密码')
else:
username = res[1]
password = res[2]
if username == 'jason' and password == '123':
print('你好,文件执行正常')
else:
print('你不是jason,没有权限执行该文件')
json模块
json 格式数据是不同编程语言之间的翻译官。
"""作用:数据基于网络传输是使用二进制传输,在python中bytes类型就是二进制数据,但是python中只有字符串可以转成bytes类型"""
json格式数据的形式 必须是字符串类型而且引号都是双引号
针对数据:
json.dumps 把数据转换成json格式
json.loads 把json 转回python可以识别的数据
# 双引号是json格式数据独有的标志符号
import json
d = {'name':'tank','pwd':222} # 有一个字典
print(d,type(d)) # 查看该字典并查看类型
print(str(d),type(str(d))) # 转成字符串后还是单引号
# json.dumps
res = json.dumps(d) # 使用json.domps 将数据类型转成json格式数据
print(res,type(res)) # 自动变成字符串并有json特有的双引号
# json.loads
ret = json.loads(res) # 使用loads 把json格式数据转成数据类型
print(ret,type(ret)) #
------------------------------------------------------------------------------------
针对文件:
json.dump() 把字典中的数据转换成json格式写入文件
import json
d = {'username': 'jason', 'pwd': 123}
# 将上述字典写入文件
with open(r'a.txt', 'w', encoding='utf8') as f:
json.dump(d,f) # 序列化
json.load() 把文件中的json 格式转换成 python可以识别的数据
with open(r'a.txt', 'r', encoding = 'utf8') as f1:
res = json.load(f1) # 反序列化
print(res) # {'username': 'jason', 'pwd': 123}
实操
import json
import os
# 动态获取执行文件所在目路径
base_dir = os.path.dirname(__file__)
# 拼接出db目录的路径 存放数据
db_dir = os.path.join(base_dir, 'db')
# 创建路径的时候要判断 拼接后的文件目录是否已存在
if not os.path.isdir(db_dir):
# 不存在就创建文件
os.mkdir(db_dir)
def register():
"""注册功能"""
# 先获取用户数据
username = input('请输入用户名').strip()
password = input('请输入密码').strip()
# 定义用户字典
user_dict = {'username': username,
'password': password,
'account': 8888,
'shop_car': []}
# 拼接用户名并以用户名组成文件路径,单个用户文件,文件名就是用户名.json
user_dir = os.path.join(db_dir, f"{username}.json")
# 判断用户名是否正确 ,
if os.path.isfile(user_dir):
"""因我们是以单个用户 一个文件,所以使用拼接后的文件目录来判断。该文件名就是用户名"""
print('用户已存在')
return
else: # 打开文件
with open(user_dir, 'w', encoding='utf8') as f:
"""因文件名用的是用户名所以这里直接使用拼接后的用户文件, 文件格式:用户名.json"""
# 写入文件
json.dump(user_dict, f)
print('注册成功')
def login():
"""登陆功能"""
# 获取用户名
username = input('请输入用户名').strip()
# 拼接用户名组成文件路径 来判断路径(文件名)是否已存在
user_dir = os.path.join(db_dir, f'{username}.json')
if not os.path.isfile(user_dir):
print('用户名不存在')
return
else:
# 获取密码
password = input('请输入密码').strip()
# 打开文件获取真实数据
with open(user_dir, 'r', encoding='utf8') as f:
# 定义一个临时字典获取数据
real_dict = json.load(f)
# 判断密码是否真确
if password == real_dict.get('password'):
"""按照字典get取值方式从临时字典中取出数据对比"""
print('登录成功')
return
else:
print('密码错误')
d1 = {'0': quit,
'1': register,
'2': login}
while True:
print("""
0:退出
1.注册
2.登录""")
choice = input('输入想要执行的功能').strip()
if choice in d1:
d1.get(choice)()