本章内容
- os模块
- sys模块
- json模块
- subprocess模块
os模块
import os
import sys
# print(sys.path)
"""创建文件目录"""
# os.mkdir(r'aaa')
# os.mkdir(r'bb\cc')
# os.makedirs(r'ccc')
# os.makedirs(r'bb\cc\dd')
"""删除目录"""
# os.rmdir(r'ccc')
# os.removedirs(r'bb') # OSError: [WinError 145] 目录不是空的。: 'bb'
# 使用removedirs方法如果外层目录也是空的则继续删除
# os.removedirs(r'F:\python_work\day 21\bb\cc\dd')
"""3.查看某个路径下"""
# print(os.listdir()) # ['.idea', 'aaa', 'bb', 'ccc', 'os 模块.py']
# print(os.listdir(r'bb\cc')) # ['dd']
"""4.删除文件、重命名文件"""
# remove不能删除文件夹,只能删除文件,eg:
# os.remove(r'aaa') # PermissionError: [WinError 5] 拒绝访问。: 'aaa'
# os.remove(r'abc.txt')
# os.rename(r'abc.txt',r'aaa.txt')
"""5.获取当前路径"""
# print(os.getcwd()) # F:\python_work\day 21
# os.chdir(r'C:') # 切换路径
# print(os.getcwd()) # C:\
"""6.软件开发目录规范 启动脚本兼容性操作"""
# 6.1 动态获取当前执行文件所在的绝对路径
# print(os.path.dirname(__file__)) # F:/python_work/day 21
# 6.2 每嵌套一层就是往上切换一层目录的绝对路径
# print(os.path.dirname(os.path.dirname(__file__))) # F:/python_work
# 6.3 动态获取当前执行文件自身的路径
# print(os.path.abspath(__file__)) # F:\python_work\day 21\os 模块.py
"""7.判断当前路径下的某个文件是否存在"""
# 获取当前路径
# print(sys.path) # 默认第一个路径 F:\\python_work\\day 21
# print(os.path.exists(r'aaa')) # True
# print(os.path.exists(r'os 模块.py')) # True
# 判断路径是否是一个文件夹
# print(os.path.isdir(r'os 模块.py')) # False
# print(os.path.isdir(r'aaa')) # True
"""8.拼接路径"""
# base_path = 'bb'
# ex_path = '路径拼接'
# print(base_path + '/' + ex_path) # 手动拼接 bb/路径拼接
# join方法进行拼接,自动识别系统的分隔符
# res = os.path.join(base_path,ex_path)
# print(res) # # bb\路径拼接
"""9.获取文件大小 单位是字节(bytes)"""
# print(os.path.getsize(r'bb')) # 0
# print(os.path.getsize(r'os 模块.py')) # 2151
"""10.浏览路径下的文件内容(文本)"""
# # 1.先获取目标文件路径(动态获取 也可以省事先写死)
# target_path = os.path.dirname(__file__)
# full_path = os.path.join(target_path, 'ccc')
# # 2.列举该路径下所有的文件名称
# file_name_list = os.listdir(full_path) # ['a.txt', 'b.txt', 'c.txt']
# 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) # ['F:\\python_work\\day 21',...]
# # 2.获取解释器版本信息
# print(sys.version) # 3.6.8 (tags/v3.6.8:3c6b436a57,...)
# # 3.获取平台信息
# print(sys.platform) # win32
# # 4.自定义命令行操作
# print(sys.argv) # ['F:/python_work/day 21/sys 模块.py']
"""模拟cmd命令"""
# if len(sys.argv) == 3: # 这里的 3 表示的是命令行中可输入三个元素
# 本身文件路径占一个位置
# 这里的判断也可以变成异常捕获的形式
# username = sys.argv[1]
# password = sys.argv[2]
# if username == 'tony' and password == '123':
# print('可以正常执行该文件')
# else:
# print('用户名或密码错误 没有该文件的执行权限')
# else:
# print('请输入用户名和密码 不能漏写或多写')
"""
在terminal 中输入:python3 "sys 模块.py" tony 123
运行后会打印 '可以正常执行该文件'
"""
"""异常捕获的形式"""
# try:
# username = sys.argv[1]
# password = sys.argv[2]
# except Exception:
# print('请输入用户名和密码')
# else:
# if username == 'tony' and password == '123':
# print('可以正常执行该文件')
# else:
# print('用户名或密码错误 没有该文件的执行权限')
json模块
"""
json.dumps() 序列化
将python数据类型转换成json格式字符串
json.loads() 反序列化
将json格式字符串转换成对应的数据类型
"""
import json
"""1.dumps 序列化"""
# d = {'name': 'tony', 'age': 18}
# d = str(d)
# print(d,type(d)) # {'name': 'tony', 'age': 18} <class 'str'>
# res = d.encode('utf8')
# print(res,type(res)) # b"{'name': 'tony', 'age': 18}" <class 'bytes'>
# # 转换成json格式的字符串 "" ""
# new_d = json.dumps(d)
# print(new_d,type(new_d)) # "{'name': 'tony', 'age': 18}" <class 'str'>
# 编码
# en_d = new_d.encode('utf8') # 此时变成bytes类型
# print(en_d, type(en_d)) # b'{"name": "tony", "age": 18}' <class 'bytes'>
"""2.loads 反序列化"""
# 解码
# de_d = en_d.decode('utf8')
# 此时变成json格式字符串
# print(de_d, type(de_d)) # {"name": "tony", "age": 18} <class 'str'>
# 转换成原本格式
# dict_d = json.loads(de_d)
# print(dict_d, type(dict_d)) # {'name': 'tony', 'age': 18} <class 'dict'>
"""可支持序列化和反序列化的数据类型如下:"""
"""
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
"""
subprocess模块
import subprocess
# ls在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('dir',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print('stdout',res.stdout.read().decode('utf8','ignore')) # 获取正确命令执行之后的结果
print('stderr',res.stderr.read().decode('utf8','ignore')) # 获取错误命令执行之后的结果
"""
该模块可以实现远程操作其他计算机的功能
动态获取命令执行并返回结果
eg:类似于Xshell软件的功能
"""