Python基础之模块:3、os模块 sys模块 json模块 json实战

一、os模块

引言:

​ OS模块是python中最为常用的模块,主要用处理文件和目录

1、创建目录

关键词:mkdir

作用:基于执行文件目录下创建文件夹,只能创建单级目录

代码用法:

导入模块:
	import os
 
代码用法:
	os.mkdir(r'bin')

关键词:makedirs

作用:基于执行文件目录下创建文件夹,可以创建单级目录和多级目录

代码用法:

导入模块:
	import os
 
代码用法:
	os.makedirs(r'aaa\bbb\ccc')

2、删除目录

关键词:rmdir

作用:基于执行文件目录下删除删除文件,只能删除单级目录,且目录必须为空

代码用法:

导入模块:
	import os
 
代码用法:
	os.rmdir(r'bin')

关键词:removedirs

作用:基于执行文件目录下删除删除文件,可以删除单级和多级目录,且目录必须为空

代码用法:

导入模块:
	import os
 
代码用法:
	os.removedirs(r'aaa\bbb\ccc')

3、查看指定路径下目录内容

关键词:listdir

作用:传入一个路径可查看该路径下文件和文件夹组成的列表,默认查看执行文件目录

代码用法:

导入模块:
    import os
 
代码用法:
	print(os.listdir())			# 默认查看执行文件目录下内容
	print(os.listdir(r'C:\\'))		# 查看指定路径下目录内容

4、删除/重命名文件

关键词:rename

作用:传入两个参数,第一个参数填入需要重命名的文件路径,第二个参数填入需要修改的名称。

​ 支持修改文件和文件夹类型,修改文件时需要填入文件后缀名

代码用法:

导入模块:
	import os
代码用法:
	os.rename(r'www.py', 'eee.py')  # 修改文件类型
	os.rename(r'aaa', 'bbb')  # 修改文件夹类型

关键词:remove

作用:参数内传入需要删除文件的路径(支持一次性删除多个文件,逗号隔开),只能删除文件,且需要输入文件后缀名,不支持删除文件夹

代码用法:

导入模块:
	import
 
代码用法:
	os.remove(r'aaa.py')	# 删除单位文件
	os.remove(r'aaa.py', r'bbb.py', r'ccc.py')		# 删除多个文件

5、获取/切换当前目录

关键词:getcwd

作用:可获取执行文件所在的目录

代码用法:

导入模块:
	import os

代码用法:
	print(os.getcwd) 	# D:/pytcharm项目文件路径/38/os模块/os

关键词:chdir

作用:切换执行文件所在的目录

代码用法:

导入模块:
	import os
    
代码用法:
	os. chdir(r'..')		# # D:/pytcharm项目文件路径/38/os模块

6、动态获取项目根路径

关键词:abspath

作用:获取当前执行文件的绝对路径,须在参数内填入__ file __

代码用法:

导入模块:
	import os

代码用法:
	print(os.path.abspath(__file__))	# D:\pytcharm项目文件路径\38\os模块\os\aaa.py

关键词:dirname

作用:获取当前执行文件所在路径,需在参数内填入__ file __

代码用法:

导入模块:
	import os
    
代码用法:
	os.path.dirname(__file__)  	

7、拼接/切割路径

关键词:jion

作用:可拼接参数内填入的路径

代码用法:

导入模块:
	import os
    
代码用法:
    path_dir = os.path.dirname(__file__) 		# 获取相对路径
    path_dir_1 = 'aaa.py'		# 定义文件名
    path_dir_2 = os.path.join(path_dir,path_dir_1)		# 拼接成绝对路径
    print(os.path.isfile(path_dir_2))		# 成功拼接	

8、判断文件、目录是否存在

  • 关键词:exists

    • 作用:判断文件或文件夹是否存在,返回True,反之False
    • 使用方法:print(os.pach.exists('文件夹路径'))
  • 关键词:isdir

    • 作用:判断是否是文件夹,返回True,反之False
    • 使用方法:print(os.pach.isdir('文件夹路径'))
  • 关键词:isfile

    • 作用:判断是否是文件,返回True,反之False
    • 使用方法:print(os.pach.isfile('文件夹路径'))

9、判断文件大小

  • 关键词:getsize

    • 作用:获取文件大小,以betys方式判断,可手动转换为其他单位

    • 使用方法:print(os.pach.getsize('文件夹路径'))

10、获取当前操作系统路径分隔符

  • 关键词:sep

    • 作用:获取当前操作系统路径分隔符

    • 使用方法:os.path.sep

二、sys模块

引言:

​ sys模块是与python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。

1、path

作用:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

代码用法:

导入模块:
	import sys
    
代码用法:
	print(os.path)
----------------------------------------------------------------------------    
	 ['D:\\pytcharm项目文件路径\\38\\os模块\\os',
    'D:\\pytcharm项目文件路径\\38\\os模块',
    'D:\\PyCharm 2021\\plugins\\python\\helpers\\pycharm_display',
    'D:\\python\\Python38\\python38.zip',
    'D:\\python\\Python38\\DLLs',
    'D:\\python\\Python38\\lib',
    'D:\\python\\Python38',
    'D:\\python\\Python38\\lib\\site-packages',
    'D:\\PyCharm 2021\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

2、getrecursionlimit

作用:获取python解释器最大递归深度,可通过setrecursionlimit()修改最大递归深度,在后方参数内修改

代码用法:

导入模块:
	import sys
    
代码用法:
	print(sys.getrecursionlimit())	 # 1000
    
	sys.setrecursionlimit(99999)
	print(sys.getrecursionlimit())	 # 99999

3、version

作用:可用来获取当前pycharm解释器版本

代码用法:

导入模块:
	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)]

4、argv

作用:实现从程序外部向程序传递参数。

代码用法:

导入模块:
	import vrgv
    
代码用法:
    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.名称必须是用双引号(“”)来引住

​ 2.值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组,或子对象

​ 3.数据在key/value中

​ 4.数据键用逗号分隔

​ 5.大括号保存对象

​ 6.中括号保存数组

1、针对数据

关键词:dumps

作用:可将python数据转换成json格式

代码用法:

导入模块:
	import json
    
代码用法:
	data_dict = {'name' : 'kangkang', 'hobby' : 'reading', 'age': 18}
	print(json.dumps(data_dicr))   # {"name": "kangkang", "hobby": "reading", "age": 18}

关键词:loads

作用:可将预编译的dumps转换成面向python的数据

代码用法:

导入模块:
	import json

代码用法:
    user_data = {'name' : 'kangkang', 'hobby' : 'reading', 'age': 18}
    json_dict = json.dumps(user_data)
    print(json.loads(json_dict))  # {'name': 'kangkang', 'hobby': 'reading', 'age': 18}

2、针对文件

关键词:dump

作用:可将python的内置类型数据转换成json格式写入文本

代码用法:

导入模块:
	import json
    
代码用法:
    user_data = {'name': 'kangkang', 'hobby': 'reading', 'age': 18}
    with open(r'a.txt', 'w', encoding='utf8') as f:
        json.dump(user_data, f)

关键词:dump

作用:可将文本内json格式的数据转换成python内置类型数据格式

代码用法:

导入模块:	
	import json
    
    
代码用法:
    user_data = {'name': 'kangkang', 'hobby': 'reading', 'age': 18}
    with open(r'a.txt', 'r', encoding='utf8') as f:
        print(json.load(f))
--------------------------------------------------------------------------------------
{'name': 'kangkang', 'hobby': 'reading', 'age': 18}

四、json模块实战

1、用户登录功能注册

1.注册功能:

import os
import sys
import json

# 获取执行文目录
user_dir = os.path.dirname(__file__)
# 获取操作系统路径分隔符
sb = os.path.sep
# 拼接db文件目录,存放用户登录数据
user_db = os.path.join(user_dir, '..' + sb + 'db')
# 创建db目录(判断db目录是否存在)
if not os.path.isdir(user_db):
    os.makedirs(user_db)


def login():
    while True:
        # 获取用户信息
        user_name = input('请创建您的用户名>>>:').strip()
        user_paw = input('请设置您的登录密码>>>:').strip()
        # 判断用户名是否存在
        if '.json'.join([user_name, '']) not in os.listdir(user_db):
            # 创建用于存储用户数据的文件的目录
            user_name_db = os.path.join(user_db, f'{user_name}.json')
            # 在文件内生成用户默认配置
            user_dict = {
                'user_name': user_name,
                'user_paw': user_paw,
                'user_money': 99999999999999999,
                'user_shop': []
            }
            # 将用户数据写
            with open(user_name_db, 'w', encoding='utf8') as f:
                json.dump(user_dict, f)
                break

        else:
            print('用户名已存在,请重新输入')


if __name__ == '__main__':
    login()

2.登录功能

import os
import json

# 获取操作文件路径系统分隔符
sb = os.path.sep
# 拼接db文件路径,用于后期验证用户输入
dir_1 = os.path.join(os.path.dirname(__file__), '..' + sb + 'db')


def register():
    # 登录次数计数装置
    count = 2
    # 登录条件判断
    while count >= 0:
        # 获取用户输入
        user_name = input('请输入您的用户名>>>:').strip()
        user_paw = input('请输入您的密码>>>:').strip()
        # 拼接用户名,用于比对用户是否存在
        user_name = user_name + '.json'
        # 比对用户是否存在
        if user_name in os.listdir(dir_1):
            # 拼接用户信息绝对路径
            abs_name_dir = os.path.join(dir_1, user_name)
            # 打开存放用户信息的文本
            with open(abs_name_dir, 'r', encoding='utf8') as f:
                # 以json格式将用户信息导出
                user_name_dict = json.load(f)
                # 验证用户密码
                if user_paw == user_name_dict.get('user_paw'):
                    print('登录成功')
                    break
                else:
                    print('密码错误')
        else:
            print(f'用户名或密码错误,剩余{count}次机会')
            # 设置登录次数限制
            count -= 1


if __name__ == '__main__':
    register()

3.启动文件

  • 装饰器暂时用不到
from core import login
from core import register


def outer(func):
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res

    return inner


dict_ = {'1': login.login, '2': register.register}
while True:
    print('''
    --------------------------
    1.注册
    2.登录
    ------------end-----------
    ''')

    choice = input('请输入想要执行的编号(Q退出)>>>:').strip().lower()
    print(choice)
    if choice == 'Q':
        break
    if choice in dict_:
        dict_.get(choice)()
    else:
        print('您的输入有误,请重新输入')

posted @ 2022-10-20 22:10  kangshong  阅读(191)  评论(0编辑  收藏  举报