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

image

判断路径是否存在文件

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
可以兼容各个系统的分隔符。

image

获取文件大小(以字节为单位)

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}  
    

image

image

实操

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)()
posted @ 2022-10-20 21:12  李阿鸡  阅读(32)  评论(0编辑  收藏  举报
Title