python各种模块(2)
os模块
os模块的简介
#什么是os模块
os模块提供了多数操作系统的功能接口函数
当os模块被导入后 它会自适应于不同的操作系统平台 根据不同的平台进行相应的操作
在python编程时,经常和文件、目录打交道
os.name |
主要作用是判断目前正在使用的平台,并给出操作系统的名字 |
os.getcwd() |
获取当前工作的目录 |
os.listdir(path) |
列出path目录下所有的文件和目录名 |
os.remove(path) |
删除path指定的文件 |
os.rmdir(path) |
删除path指定的目录 |
os.mkdir(path) |
创建path指定的目录 |
os.path.isfile(path) |
判断指定对象是否为文件 |
os.path.isdir(path) |
判断指定对象是否为目录 |
os.path.exists(path) |
检验指定的对象是否存在 |
os.path.split(path) |
返回路径的目录和文件名,即将目录和文件名分开,而不是一个整体 |
os.system(cmd) |
执行shell命令。返回值是脚本的退出状态码,0代表成功,1代表不成功 |
os.chdir(path) |
'change dir'改变目录到指定目录 |
os.path.getsize() |
获得文件的大小,如果为目录,返回0 |
os.path.abspath() |
获得绝对路径 |
os.path.join(path, name) |
连接目录和文件名,与os.path.split(path)相对 |
.os.path.basename(path) |
返回文件名 |
os.path.dirname(path) |
返回文件路径 |
#代码示例:
1.创建目录里
import os
os.mkdir(r'bbb') # 使用相对路径 在当前执行文件所在的路径下创建一个aaa文件夹
'mkdir只能创建单级目录'
os.makedirs(r'ccc/ddd') # makedirs支持创建多级目录
2.删除目录
os.rmdir(r'bbb') # 只能删空的单级目录
os.removedirs(r'E:\PyCharm2021.2.3\jbr\bin\E\PycharmProjects\pythonProject2\ccc\ddd')
# 删除目录之后如果外层的目录也是空的则继续删除
3.查看某个路径下所有的文件名称(文件、文件夹)
print(os.listdir()) # 查看执行文件下的目录
print(os.listdir(r'E:\Python36')) # 查看指定目录
4.删除文件、重命名文件
os.remove(r'a.txt') # 删除文件
os.rename('weekday2','week2.py') #重命名该文件
5.获取当前路径、切换路径
print(os.getcwd()) # 获取当前路径
os.chdir(r'E:\python36') # 改变当前工作目录到指定的路径
6.软件开发目录规范 启动脚本兼容性操作
os.path.dirname(__file__) # 动态获取当前执行文件所在的绝对路径
os.path.dirname(os.path.dirname(__file__)) # 每嵌套一层就是往上切换一层
print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径
7.判断文件是否存在
print(os.path.exists(r'a.txt')) # True 判断所给的路径是否存在
print(os.path.exists(r'week2.py')) # True 判断所给的路径是否存在
print(os.path.isfile(r'aaa')) # False 判断路径是否是一个文件
print(os.path.isfile(r'week2.py')) # True 判断路径是否是一个文件
8.拼接路径
res = os.path.join(base_dir, exe_dir) # 能够自动识别当前操作系统的分隔符
9.获取文件大小(字节 bytes)
print(os.path.getsize(r'week2.py')) # 2231bytes
print(os.path.getsize(r'a.txt')) # 14bytes
小练习
# 选择指定文件并打开浏览(目前只考虑文本文件即可)
# 展示某个文件下所有的文件名称 用户选择哪个就打开哪个
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模块
#什么是sys模块
该模块提供对解释器使用或维护的一些变量的访问 以及与解释器强烈交互的函数 它始终可用
#代码示例:
import sys
# 1.列举当前执行文件所在的sys.path
print(sys.path)
# 2.获取解释器版本信息
print(sys.version)
# 3.获取平台信息
print(sys.platform) # win32
# 4.自定义命令行操作
print(sys.argv)
"""
cmd终端可以使用windows+r并输入cmd唤起
也可以在pycharm直接使用快捷方式Terminal
模拟cmd并自动切换到当前执行文件所在的路径下
"""
if len(sys.argv) == 3: # 这里的判断也可以变成异常捕获的形式
username = 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('用户名或密码错误 没有该文件的执行权限')
json模块
#什么是jason
json是一种轻量级的数据交换格式
JSON的数据格式其实就是python里面的字典格式 里面可以包含方括号括起来的数组 也就是python里面的列表
#有专门处理json格式的模块—— json 和 picle模块
Json 模块提供了四个方法: dumps、dump、loads、load
pickle 模块也提供了四个功能:dumps、dump、loads、load
'''json是一个序列化模块 主要用于跨语言传输数据'''
1.参考下图得知json格式数据是不同变成语言之间数据交互的媒介
2.json格式数据的具体特征
结论1中有一个小细节>>>:数据基于网络传输肯定是二进制格式
在python中bytes类型的数据可以直接看成是二级制数据
python中哪些数据可以转成bytes类型(编码encode())
只有字符串可以!!!
# 由上述推论可知 json格式数据 本质应该属于字符串类型
#代码示例:
import json
json.dumps([]) # dumps可以格式化所有的基本数据类型为字符串'[]'
json.dumps(1) # 数字 '1'
json.dumps('1') # 字符串'"1"'
dict = {"name":"Tom", "age":23}
json.dumps(dict) # 字典
a = {"name":"Tom", "age":23}
with open("test.json", "w", encoding='utf-8') as f:
# indent 格式化保存字典,默认为None,小于0为零个空格
f.write(json.dumps(a, indent=4))
# json.dump(a,f,indent=4) # 和上面的效果一样
"""
json.dumps() 序列化
将python数据类型转换成json格式字符串
json.loads() 反序列化
将json格式字符串转换成对应的数据类型
"""
python对象(obj) 与json对象的对应关系
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
subprocess模块
#什么是subprocess模块
subprocess 模块允许我们启动一个新进程 并连接到它们的输入/输出/错误管道 从而获取返回值
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软件的功能
"""
