模块2
start
一.os模块
'我为什么分开写 方便看分清dir前面字母的作用'
'该模块是跟着操作系统打交道'
import os # 调用内置模块 os
1.在当前路径创建一个abc的目录(使用的是相对路径)
# os.mk dir(r'abc')
2.创建单个目录aaa,也支持创建多个目录
# os.make dirs(r'aaa\bbb\ccc')
3.删除目录(文件夹)只能删除空的单个目录
# os.rm dir
4.删除多个目录,由内而外的删空的目录需放入路径下所要删除的所有文件名
# os.remove dirs(r'D:\pythonProject1 3.29\aaa\bbb\ccc')
5.查看某个路径下的名称文件(文件,文件夹,隐藏目录)
# print(os.list dir(r'D:'))
6.删除文件,重复名文件(删除时,内有内容也删)
# os.remove(r'a.py')
7.获取当前路径
# print(os.getcwd())
8.切换路径
# os.ch dir(r'D:')
# print(os.getcwd())
9.软件开发目录规范 启动脚本兼容性操作
# os.path.dir name(__file__) # 动态获取当前文件所在的绝对路径
9.1 嵌套一层就是往上一层切换
# os.path.dir name(os.path.dir name(__file__))
9.2动态获取当前执行文件自身路径
# print(os.path.abspath(__file__))
10.判断文件是否存在
# print(os.path.exists(r'aaa')) #False
11.判断该文件是否在这个路径
# print(os.path.isfule(r'os模块')) #Ture
12.拼接路径
# base_dir = 'aaa'
# exe1_dir = 'bbb'
# res = os.path.join(base_dir, exe1_dir)
13.获取文件大小(字节 bytes)
# print(os.path.getsize(r''aaa)) #23
1.1小例题
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模块
inport sys
'该模块主要用于python解释器'
目前已知
1.当前执行文件所在的位置
# sys.path
2.获取解释器信息
# sys.version
3.获取平台信息
# sys.platform
4.自定义命令操作
sys.argv
"""
cmd终端可以使用windows+r 唤起
pycharm中有直接的快捷方式Terminal
模拟cmd并自动切换到当前执行文件路径下
"""
2.1例题
import sys
if len(sys.argv) == 3:
username = sys.argv[1]
password = sys.argv[2]
if username == 'jason' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
else:
print('请输入用户名和密码 不能漏写或多写')
2.2例题
try:
username = sys.argv[1]
password = sys.argv[2]
except Exception:
print('请输入用户名和密码')
else:
if username == 'jason' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
三.json模块
'json是序列化模块.主要用于跨语言传输数据'
json格式数据的特征:
1.数据传输是基于网络是二进制传输
2.python只有字符串形式可以看成byter类型可以用(编码encode())
3.说以json数据格式 本质属于字符串类型
4."json格式"独有的就是双引号 '字符串格式是单引号'
"""
json.dumps() 序列化
将python数据类型转换成json格式字符串
json.loads() 反序列化
将json格式字符串转换成对应的数据类型
"""
5.json格式可以传递出去 也可以传递回来接着调用
3.1例题
import json
d = {'username': 'jason', 'pwd': 123}
# 将上述字典写入文件
with open(r'a.txt','w',encoding='utf8') as f:
# f.write(d)
# f.write(str(d))
# f.write(json.dumps(d))
json.dump(d, f)
# 将文件内容获取出来
with open(r'a.txt','r',encoding='utf8') as f:
# data = f.read()
# res = json.loads(data)
# print(res, type(res))
data = json.load(f)
print(data, type(data))
3.2支持数据类型序列化的有
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
四.subprocess模块
import subprocess
'该模块是实现远程操作其他计算机的功能动态获取命令执行并返回结果'
4.1例
'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')) # 获取错误命令执行之后的结果