常用内置模块之os,sys,json
os模块(重要)
os模块主要与代码运行所在的操作系统打交道
1.创建目录(也称为文件夹)
import os
os.mkdir(r'd1') # 相对路径,在执行文件躲在路径下创建目录
# "mkdir创建的是单级目录"
os.mkdir(r'd2.aaa.bbb.bbb') # 尝试多级目录报错
os.makedirs(r'd3\aaa\ccc\vvv') # 创建多级目录
"创建多级目录需要用makedirs,也可以创建单级目录"
os.makedirs(r'd4') # 创建成功
2.删除目录(删除文件夹)
os.rmdir(r'd1') # 删除成功
"""rmdir可以删除单级目录,不可以删除多级目录,注意删除的只能是空的目录"""
os.rmdir(r'd3\aaa\ccc\vvv') # 直接报错
os.removedirs(r'd3\aaa\ccc\vvv') # 删除成功
"""removedirs可以删除多级目录,注意:删除的只能是空的目录"""
3.列举执行路径下内容名称
print(os.listdir()) # ['.idea', 'd1', 'd2', 'd3', 'd5', '与操作系统打交道.py']
"""以执行文件所以在路径查询路径下所有的内容名称"""
print(os.listdir(r'C:\360Downloads')) # 查看计算机路径下的
4.删除/重命名文件
print(os.rename(r'a.txt', 'aaa.txt')) # 修改文件名
"""文件名a.txt被修改为aaa.txt"""
os.remove(r'aaa.txt') # 删除aaa.txt文本
5.获取/切换当前工作目录
print(os.getcwd()) # 获取当前文件的工作目录
"""C:\Python38\python.exe C:/pythonProject/模块学习/d5/aa.bb.cc/与操作系统打交道.py"""
os.chdir('../../..') # 切换到上一层文件的工作目录
6.动态获取项目根路径(特别重要)
print(os.path.abspath(__file__)) # 获取执行文件的绝对路径
"""C:\pythonProject\模块学习\d5\aa.bb.cc\与操作系统打交道.py"""
print(os.path.dirname(__file__)) # 获取执行文件所在目录路径
"""C:/pythonProject/模块学习/d5/aa.bb.cc"""
7.判断路径是否存在
print(os.path.exists(r'C:\pythonProject\模块学习\d5\aa.bb.cc\与操作系统打交道.py'))
"""判断文件路径是否存在结果为True"""
print(os.path.exists(r'C:\pythonProject\模块学习\d1'))
"""判断目录(也就是文件夹)是否存在结果为True"""
print(os.path.isfile(r'C:\pythonProject\模块学习\d5\aa.bb.cc\与操作系统打交道.py'))
"""判断路径是否是文件,关键字sifile,结果为True"""
print(os.path.isfile(r'C:\pythonProject\模块学习\d5\aa.bb.cc'))
"""判断路径是否是文件,这次我们使用目录,结果是False"""
print(os.path.isdir(r'C:\pythonProject\模块学习\d5\aa.bb.cc\与操作系统打交道.py'))
"""判断路径是否是目录,我们用文件判断结果是Fales"""
print(os.path.isdir(r'C:\pythonProject\模块学习\d3'))
"""判断路径是否是目录,我们使用目录判断结果是True"""
8.路径拼接
s1 = r'C:\pythonProject\模块学习\d1'
s2 = r'与操作系统打交道.py'
print(os.path.join(s1, s2))
"""C:\pythonProject\模块学习\d1\与操作系统打交道.py"""
9.获取文件大小(字节)
print(os.path.getsize(r'a.txt'))
sys模块
import sys
print(sys.path) # 获得执行文件的环境变量,可以添加
"""
['C:\\pythonProject\\模块学习', 'C:\\pythonProject\\模块学习',
'C:\\PyCharm 2021.2.4\\plugins\\python\\helpers\\pycharm_display',
'C:\\Python38\\python38.zip', 'C:\\Python38\\DLLs',
'C:\\Python38\\lib', 'C:\\Python38', 'C:\\Python38\\lib\\site-packages',
'C:\\PyCharm 2021.2.4\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
"""
print(sys.getrecursionlimit()) # 获取python解释器默认最大递归深度
sys.setrecursionlimit(2000) # 修改python解释器默认最大递归深度
print(sys.version) # 获得python解释器的版本
"""3.8.6 (tags/v3.8.6:db45529,
Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
"""
print(sys.platform) # 获取平台信息win32
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模块也称为序列号模块,序列化可以打破语言显示实现不同编程语言之前的数据交互
json格式数据的作用
可以起到一个中间翻译的效果,让不同编程语言交互
json格式数据的形式
字符串类型并且引号都是双引号
针对数据
json.dumps() '将数据转为json格式'
json.loads() '将json格式转为列表
代码展示:
name_dict = {'name': 'tony', 'pwd': '123'}
import json
res = json.dumps(name_dict)
print(res) # {"name": "tony", "pwd": "123"}
ret = json.loads(res)
print(ret) # {'name': 'tony', 'pwd': '123'}'
针对文件
json.dump() '将字典转json格式写入’
json.load() '将json格式转字典赋值'
代码展示:
import json
name_dict = {'name': 'tony', 'pwd': '123'}
with open(r'a.txt','w',encoding='utf8')as f:
json.dump(name_dict,f) # 直接将字典转json格式写入文件
# user_dict = {}
with open(r'a.txt','r',encoding='utf8')as f1:
user_dict = json.load(f1) # 直接将json格式转字典
print(user_dict)
json模块实战
用户注册功能
import os
import json
# 注册功能
# 1.先获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__) # C:/pythonProject/模块学习/d3
# 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db') # C:/pythonProject/模块学习/d3\db
# 3.创建db目录
if not os.path.isdir(db_dir): # isdir判断文件是否是目录,就是判断文件db是否存在
os.mkdir(db_dir) # 如果不是就创建这个目录,mkdir创建单级目录
# 4.获取用户数据
username = input('请输入您的账户>>>>:').strip()
password = input('请输入您的用户密码>>>:').strip()
# 4.1判断用户名是否已经存在,就是判断文件是否存储
user_file_path = os.path.join(db_dir, f'{username}.json')
if not os.path.exists(user_file_path):
"""f后面是名字.json的文件名,将这个文件名加入db_dir文件路径下"""
# 5.构造用户字典
user_dict = {
'username': username,
'password': password,
'account': 150000, # 账户余额
'shop_car': [] # 购物车
}
# 6.写入文件数据
with open(user_file_path, 'w', encoding='utf8') as f:
json.dump(user_dict, f) # 此处用dump直接在文件里面写入json格式数据
else:
print('账号已存在')
用户登录功能
import os
import json
# 注册功能
# # 1.先获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__) # C:/pythonProject/模块学习/d3
# 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db') # C:/pythonProject/模块学习/d3\db、
user_name = input('请输入用户名>>>>:').strip()
# 3.拼接上述用户名组成文件路径
target_user_file_path = os.path.join(db_dir, f'{user_name}.json')
"""还是将用户名生成的文件路径跟db目录路径进行拼接"""
if not os.path.isfile(target_user_file_path):
"""判断这个路径是不是文件,如果不是证明这个文件名不存在"""
print('不好意思,用户名不存在')
else: # 表示这个路径是文件,证明这个文件是存在的
password = input('请输入用户密码>>>>:').strip()
# 4.获取用户真实数据字典
with open(target_user_file_path, 'r', encoding='utf8') as f:
real_user_dict = json.load(f)
if password == real_user_dict['password']:
print('登录成功')
else:
print('密码错误')