os与sys模块,json模块
import os
os.mkdir(r'a1') # 在执行文件所在的路径下创建单级目录a1 os.mkdir(r'a2\b2\c2') # 不可以创建多级目录 os.makedirs(r'a1') # 可以创建单级目录 os.makedirs(r'a2\b2\c2') # 也可以创建多级目录
import os
os.rmdir(r'a2') # 可以删除空的单级目录 os.rmdir(r'a2\b2\c2') # 不可以一次性删除多级目录 os.removedirs(r'a2\b2\c2') # 可以删除多级目录,但是只能删除空的多级目录
3.列举指定路径下内容名称
import os
print(os.listdir()) # ['.idea', '01 os模块.py', 'a2', 'bin', 'conf', 'core']
4. 删除/重命名文件
import os os.rename(r'a.txt', r'aa.txt') # 将文本文件‘a.txt’重命名为‘aa.txt’ os.remove(r'aa.txt') # 删除文本文件‘aa.txt'
5. 获取/切换当前工作目录
import os
print(os.getcwd()) # 获取当前工作目录 D:\pythonProject\modules os.chdir('..') # 切换到上一级目录 print(os.getcwd()) # D:\pythonProject os.mkdir(r'b') # 在D:\pythonProject目录下创建文件夹b D:\pythonProject\b
6. 动态获取项目根路径(重要)
import os print(os.path.abspath(__file__)) # 获取执行文件的绝对路径(带自己) D:\pythonProject\modules\01 os模块.py print(os.path.dirname(__file__)) # # 获取执行文件所在的目录路径(不带自己) D:/pythonProject/modules
7. 判断路径是否存在(文件、文件夹)
import os print(os.path.exists(r'01 os模块.py')) # 判断文件路径是否存在 True
print(os.path.exists(r'D:\pythonProject\modules')) # 判断文件夹路径是否存在 True
print(os.path.isfile(r'01 os模块.py')) # 判断路径是否是文件 True
print(os.path.isfile(r'D:\pythonProject\modules')) # 判断路径是否是文件 False print(os.path.isdir(r'01 os模块.py')) # 判断路径是否是文件夹 False print(os.path.isdir(r'D:\pythonProject\modules')) # 判断路径是否是文件夹 True
8. 路径拼接(重要)
import os s1 = r'D:/pythonProject/modules' s2 = r'01 os模块.py' print(os.path.join(s1, s2)) # 将s1与s2的路径拼接到一起 D:/pythonProject/modules\01 os模块.py
9. 获取文件大小(字节)
import os print(os.path.getsize(r'01 os模块.py')) # 1963
实战案例:
# D:\pythonProject\modules\core\src.py 在core文件夹创建一个函数 def register(): print('注册功能') def login(): print('登录功能') def shopping(): print('购物功能') func_dict = { '1':register, '2':login, '3':shopping } def run(): while True: print(""" 1.注册功能 2.登录功能 3.购物功能 """) choice = input('功能编号>>>:').strip() if choice in func_dict: func_dict.get(choice)() else: print('您要的功能编号不存在') # D:\pythonProject\modules\bin\start.py from core import src # 从core文件夹导入src模块到bin文件夹下的启动文件start.py if __name__ == '__main__': src.run() # 调用函数,可以正常运行
如果将该项目打包给另一个人,该项目的保存路径可能会发生变化,直接运行执行文件可能会出错,需要动态获取项目根路径。
优化(启动文件中需添加新设备上项目所在路径):
import os import sys base_dir = os.path.dirname(__file__) # 获取新设备上执行文件所在路径 base_dir = os.path.dirname(os.path.dirname(__file__)) # 嵌套获取上一层路径 sys.path.append(base_dir) # 添加项目目录到系统路径 from core import src if __name__ == '__main__': src.run()
二、 sys模块
sys模块主要与Python解释器打交道。
1. 获取执行文件的sys.path
import sys print(sys.path) # 获取执行文件的sys.path
2. 获取python解释器默认最大递归深度
import sys print(sys.getrecursionlimit()) # 获取python解释器默认最大递归深度
3. 修改python解释器默认最大递归深度
import sys sys.setrecursionlimit(2000) # 修改python解释器默认最大递归深度
4. 获取解释器版本
import sys print(sys.version) # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
5. 获取平台信息
import sys print(sys.platform) # win32
6. sys.argv
lst = sys.argv # 在终端中模拟input输入,避免input函数阻塞
三、json模块
json模块:也称为序列化模块,序列化可以打破语言限制实现不同编程语言之间数据交互。
json格式数据的形式:字符串类型,引号为双引号
d = {'name' : 'Alex' , 'pwd': 123} print(d, type(d)) # {'name': 'Alex', 'pwd': 123} <class 'dict'> import json res = json.dumps(d) print(res, type(res)) # {"name": "Alex", "pwd": 123} <class 'str'>
jason相关操作:
import json # 结合数据一起使用 json.dumps() # 序列化 将数据转化为json格式 json.loads() # 反序列化 将json格式字符串转化为某一个对应格式类型 # 结合文件一起使用 json.dump(user_dict, f) # 将数据转化为json格式,并写到文件里面去 json.load(f) # 读取文件中json格式数据并反序列化成数据类型
案例1:
将字典写入文件,并且取出来还是字典
d = {'name' : 'Alex' , 'pwd': 123}
方法1:
import json d = {'name': 'Alex', 'pwd': 123} with open(r'a.txt','w', encoding = 'utf8') as f: json_str = json.dumps(d) # 将字典格式转化为json字符串 f.write(json_str) # 将json字条串写入文件 with open(r'a.txt', 'r', encoding = 'utf8') as f: json_str = f.read() # 读取文件中json格式的字符串 json_dict = json.loads(json_str) # 将json格式的字符串转化为字典 print(json_dict, type(json_dict)) # {'name': 'Alex', 'pwd': 123} <class 'dict'>
方法2:
import json d = {'name': 'Alex', 'pwd': 123} with open(r'a.txt','w', encoding = 'utf8') as f: json.dump(d,f) # 将字典转换成json格式字符串并写入文件 """ 等价于>>> json_str = json.dumps(d) f.write(json_str) """"
with open(r'a.txt', 'r', encoding = 'utf8') as f: res = json.load(f) # 将文件中的json格式字符串读取出来并转化成字典 """ 等价于>>> json_str = f.read() json_dict = json.loads(json_str) """ print(res) # {'name': 'Alex', 'pwd': 123} <class 'dict'>
案例2:
将文件中的多行json格式数据读取出来转成字典格式:
文件中的数据:
{"name": "Alex", "pwd": 111}
{"name": "Bob", "pwd": 222}
{"name": "Cindy", "pwd": 333}
import json with open(r'a.txt', 'r', encoding = 'utf8') as f: for line in f: print(json.loads(line))
注:一般情况下,json数据是以单文件储存,不会出现一个文件中出现多个用户数据的情况。
jsaon模块实战:
1. 先用json模块实现用户注册
# # 获取或创建文件路径和文件夹 import json import os # 1.获取执行文件所在的目录路径 base_dir = os.path.dirname(__file__) # print(base_dir) # D:/pythonProject/modules # 2.拼接出db目录的路径 db_dir = os.path.join(base_dir, 'db') # print(db_dir) # D:/pythonProject/modules/db # 3.创建db目录 if not os.path.isdir(db_dir): os.mkdir(db_dir) ## 注册用户 # 4.获取用户名和密码 username = input('username>>>:') password = input('password>>>:') # 4.1判断用户名是否已存在,两种方法: # 方法1:将输入的用户名转化成用户文件格式,与os.listdir(db_dir)作对比 format_name = f'{username}.json' if format_name in os.listdir(db_dir): # os.listdir(db_dir)是一个用户信息组成的列表 ['alex.json', 'bob.json', 'cindy.json'] print('用户名已存在') # 方法2:拼接存储用户数据的文件路径,看看是否已经存在 user_file_path = os.path.join(db_dir, f'{username}.json') if os.path.exists(user_file_path): print('用户名已存在') # 5.构造用户字典 user_dict = { 'username': username, 'password': password, 'account': 15000, 'shop_car':[] } # 6.写入文件数据 with open(user_file_path, 'w', encoding = 'utf8') as f: json.dump(user_dict,f)
2. 基于上述用户实现用户
import json import os # 1.获取执行文件所在的目录路径 base_dir = os.path.dirname(__file__) # print(base_dir) # D:/pythonProject/modules # 2.拼接出db目录的路径 db_dir = os.path.join(base_dir, 'db') # print(db_dir) # D:/pythonProject/modules/db # 3.创建db目录 if not os.path.isdir(db_dir): os.mkdir(db_dir) # 登录功能 # 4.输入用户名并判断用户名是否存在 username = input('username>>>:') # 4.1 拼接上述用户名组成的文件路径 target_user_file_path = os.path.join(db_dir, f'{username}.json') # 4.2 判断用户名是否已经存在 if not os.path.exists(target_user_file_path): print('用户名错误') else: password = input('password>>>:').strip() # 5.获取用户真实数据字典,对比用户密码是否正确 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('密码错误')