os模块 sys模块 json模块 subprocess模块
-
-
sys模块
-
json模块(重要)
-
os模块(重要)
"""该模块是与操作系统交互的一个接口"""
import os # 1.创建目录 (文件夹) os.mkdir(r'aaa') # 使用相对路径 在当前执行文件所在的路径下创建一个aaa文件夹 mkdir只能创建单级目录 不然会报错 os.makedirs(r'ccc') # makedirs可以创建ccc单级目录 os.makedirs(r'11/22/33') # makedirs支持创建多级目录 11嵌套22嵌套33 # 2.删除目录(文件夹) os.rmdir(r'aaa') # 删除aaa单级目录 os.rmdir(r'bbb') # 只能删空的单级目录 os.removedirs(r'ccc') # 删除ccc单级目录 os.removedirs(r'/Users/jiligulu/py1/day21/bbb/ccc/ddd') # 删除ddd之后如果外层的目录也是空的则继续删除 # 3.查看某个路径下所有的文件名称(文件、文件夹) print(os.listdir()) # ['11', '随机产生数字 作业讲解.py', '02 os模块.py', '.idea'] 列表形式 .idea 文件前面有点是隐藏文件 print(os.listdir(r'/Users')) # 列举出Users下面的所有文件名称 # 4.删除文件、重命名文件 os.remove(r'文件名') # 删除文件 os.rename(r'被替换文件名', r'替换文件') # 重命名文件 # 5.获取当前路径、切换路径 print(os.getcwd()) # 当前路径 os.chdir(r'/Users/jiligulu') # 切换路径 print(os.getcwd()) # 6.软件开发目录规范 启动脚本兼容性操作 print(os.path.dirname(__file__)) # 获取当前执行文件所在的绝对路径 /Users/jiligulu/py1/day21/ATM/bin print(os.path.dirname(os.path.dirname(__file__))) # 每嵌套一层就是往上切换一层 /Users/jiligulu/py1/day21/ATM """也可以使用以下方式""" print(os.path.abspath(__file__)) # /Users/jiligulu/py1/day21/ATM/bin/strat.py 动态获取当前执行文件自身的路径 # 7.判断文件是否存在 print(os.path.exists(r'ATM')) # True 判断所给的路径是否存在 print(os.path.exists(r'随机产生数字 作业讲解.py')) # True 判断所给的路径是否存在 print(os.path.exists(r'ATM')) # True 判断所给的路径是否存在 print(os.path.exists(r'随机产生数字 作业讲解.py')) # True 判断所给的路径是否存在 print(os.path.isdir(r'ATM')) # True 判断路径是否是一个文件夹 print(os.path.isdir(r'随机产生数字 作业讲解.py')) # False 判断路径是否是一个文件夹 print(os.path.isfile(r'ATM')) # False 判断路径是否是一个文件 print(os.path.isfile(r'随机产生数字 作业讲解.py')) # True 判断路径是否是一个文件 # 8.拼接路径 base_dir = 'ATM' exe_dir = '随机产生数字 作业讲解.py' '''需求:拼接成py文件的路径''' # print(base_dir + '/' + exe_dir) # 路径分隔符在不同的系统下是不一样的 使用加号的话兼容性极差 res = os.path.join(base_dir, exe_dir) # 一样的功能 这个方法能够自动识别当前系统的分隔符 print(res) # 9.获取文件大小 print(os.path.getsize(r'ATM')) # 128bytes 中文3个字节 字母1个字节 print(os.path.getsize(r'02 os模块.py')) # 3014bytes
os模块相关练习
需求:
# 选择指定文件并打开浏览(目前只考虑文本文件即可)
# 展示某个文件下所有的文件名称 用户选择哪个就打开哪个
import os # 1.先获取目标文件路径(动态获取 也可以省事先写死) target_path = os.path.dirname(__file__) full_path = os.path.join(target_path, '好看的合集') # 2.列举该路径下所有的文件名称 file_name_list = os.listdir(full_path) # ['','','',''] while True: # 3.循环展示每个文件名称 for i, j in enumerate(file_name_list, start=1): print(i, j) # 4.获取用户选择的编号 target_num = input('请输入您想要查看的文件编号>>>:').strip() # 5.判断是否是纯数字 if target_num.isdigit(): # 6.如果是纯数字 转换成整型 target_num = int(target_num) # 7.判断数字在不在数量范围内 if target_num in range(1, len(file_name_list) + 1): # 8.获取文件名称 file_name = file_name_list[target_num - 1] # 9.拼接完整路径 full_file_path = os.path.join(full_path, file_name) # 10.文件操作打开文件 with open(full_file_path, 'r', encoding='utf8') as f: print(f.read()) else: print('没有该编号的文件') else: print('编号只能是数字') """ 如果是其他类型的文件 那么普通的文件操作是没有正常打开并观看的 需要调用各自软件的接口 """
sys模块
"""该模块主要是跟python解释器打交道""" import sys # 1.列举当前执行文件所在的sys.path(掌握) print(sys.path) # 2.获取解释器版本信息(了解) print(sys.version) # 3.获取平台信息(了解) print(sys.platform) # 4.自定义命令行操作 print(sys.argv) """ cmd终端可以使用windows+r并输入cmd唤起 也可以在pycharm直接使用快捷方式Terminal 模拟cmd并自动切换到当前执行文件所在的路径下 """ if len(sys.argv) == 3: # 这里的判断也可以变成异常捕获的形式 sername = sys.argv[1] password = sys.argv[2] if username == 'jason' and password == '123': print('可以正常执行该文件') else: print('用户名或密码错误 没有该文件的执行权限') else: print('请输入用户名和密码 不能漏写或多写') try: username = sys.argv[1] password = sys.argv[2] except Exception: print('请输入用户名和密码') else: if username == 'jason' and password == '123': print('可以正常执行该文件') else: print('用户名或密码错误 没有该文件的执行权限')
1.参考截图得知json格式数据是不同变成语言之间数据交互的媒介
2.json格式数据的具体特征
结论1中有一个小细节>>>:数据基于网络传输肯定是二进制格式
在python中bytes类型的数据可以直接看成是二级制数据
python中哪些数据可以转成bytes类型(编码encode())
只有字符串可以!!!
# 由上述推论可知 json格式数据 本质应该属于字符串类型
# 双引号是json格式数据独有的标志符号!!!
"""判断是不是json格式"""
import json d = {'username' : 'anna', 'pwd': 188} print(d, type(d)) # {'username': 'anna', 'pwd': 188} <class 'dict'> 字典 res = json.dumps(d) print(res, type(res)) # {"username": "anna", "pwd": 188} <class 'str'> 字符串 print(str(d), type(str(d))) # {'username': 'anna', 'pwd': 188} <class 'str'> '''双引号是json格式数据独有的标志符号''' d = {"username": "anna", "pwd": 188} print(d) # {'username': 'anna', 'pwd': 188} 不是json格式 res1 = '{"username":"jason","pwd":123}' print(res1) # {"username":"jason","pwd":123} 算json格式
""" 将python任意的数据类型做编码处理 基于网络发给对方 对方以字符串的形式解码 还可以转换成任意类型
变成字符串再还原 """
import json
d = {'username': 'anna', 'pwd': 188} res = json.dumps(d) print(res, type(res)) # json格式字符串 {"username": "anna", "pwd": 188} <class 'str'> encode_str = res.encode('utf8') # 进行编码处理 '''假设将该字符串基于网络发给了另外一个python程序''' # 先将bytes类型转换成字符串 json_str = encode_str.decode('utf8') print(json_str, type(json_str)) # 变成字符串 {"username": "anna", "pwd": 188} <class 'str'> res1 = json.loads(json_str) print(res1, type(res1)) # 字典又回来了 {'username': 'anna', 'pwd': 188} <class 'dict'> """ json.dumps() 序列化 将python数据类型转换成json格式字符串
json.loads() 反序列化 将json格式字符串转换成对应的数据类型 """ """ 如果json模块需要配合文件一起使用的话 有固定的方法 json.dump() 将其他数据类型直接写入文件(自动转json格式字符串) json.load() 将文件数据直接转成对应的数据类型(自动反序列化) """ # 强调:不是所有的数据类型都支持序列化 """
能够被序列化的类型: +-------------------+---------------+ | Python | JSON | +===================+===============+ | dict | object | +-------------------+---------------+ | list, tuple | array | +-------------------+---------------+ | str | string | +-------------------+---------------+ | int, float | number | +-------------------+---------------+ | True | true | +-------------------+---------------+ | False | false | +-------------------+---------------+ | None | null | +-------------------+---------------+ """
# 基本不用 因为它不支持跨语言传输 只能识别python代码 '''直接忽略 不用掌握'''
import subprocess # ls在终端的意思就是查看当前路径下所有的文件名称 res = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) print('stdout',res.stdout.read().decode('utf8')) # 获取正确命令执行之后的结果 print('stderr',res.stderr.read().decode('utf8')) # 获取错误命令执行之后的结果 """ 该模块可以实现远程操作其他计算机的功能 动态获取命令执行并返回结果 eg:类似于Xshell软件的功能 """