常用模块讲解(二)

常用模块讲解(二)

os模块

  1. 创建文件目录(文件夹)

import os
os.mkdir(r'aaa')  # 在当前执行文件的路径下创建一个aaa文件夹,使用的是相对路径
# os.mkdir(r'bbb/ccc')  # 报错,mkdir只能创建单级目录
os.makedirs(r'ccc')  # 在当前执行文件的路径下创建一个ccc文件夹,使用的是相对路径
os.makedirs(r'bbb/ccc/aaa')  # 支持多级目录的创建
  1. 删除目录

os.rmdir(r'aaa')  # 删除单级目录
# os.rmdir(r'bbb')  # 报错,rmdir只能删除单级空目录
os.removedirs(r'ccc')  # 删除单级目录
os.removedirs(r'F:\Py3\day1\bbb\ccc\aaa')  # 从内至外,如果最内层是空的删除,次层是空的也删除,一直到目录不为空为止
  1. 查看某个路径下所有的文件名称

res = os.listdir()  # 获取当前路径的所有文件
print(res)
res1 = os.listdir(r'C:')  # 获取指定路径下的所有文件
print(res1)
  1. 删除文件、重命名文件

os.remove(r'2.txt')  # 删除文件
os.rename(r'.2txt',r'2222.txt')  # 重命名文件,第一个参数是旧文件名,第二个参数是新文件名
  1. 获取当前路径、切换路径

print(os.getcwd())  # F:\Py3\day1 获取当前路径 
os.chdir(r'F:\pycharm')  # 切换路径
print(os.getcwd())  # F:\pycharm
  1. 启动脚本的兼容性操作

print(os.path.dirname(__file__))  # F:/Py3/day1 动态获取当前执行文件所在的绝对路径
print(os.path.dirname(os.path.dirname(__file__)))  # F:/Py3 每嵌套一次就往上切换一层路径
  1. 判断文件是否存在

print(os.path.exists(r'2222.txt'))  # True 判断所给的路径是否存在,整个电脑的路径都可以判断
print(os.path.exists(r'F:\Py3\day1\sss\asd.py'))  # True 判断所给的路径是否存在,整个电脑的路径都可以判断
print(os.path.isdir(r'2222.txt'))  # False 判断所给的路径是否是一个文件夹
print(os.path.isdir(r'sss'))  # True 判断所给的路径是否是一个文件夹
print(os.path.isfile(r'sss'))  # False 判断所给文件是否是一个文件
print(os.path.isfile(r'F:\Py3\day1\sss\asd.py'))  # True 判断所给文件是否是一个文件
  1. 拼接路径

a = 'sss'
b = '1.txt'
print(os.path.join(a,b))  # sss\1.txt 拼接路径,还能够自动识别不通同操作环境
  1. 获取文件大小

print(os.path.getsize(r'03.10.py'))  # 5206 获取的大小是字节数(bytes)
print(os.path.getsize(r'2222.txt'))  # 77 获取的大小是字节数(bytes)

sys模块

  1. 列举当前执行文件所在的sys.path

import sys
print(sys.path)  # ['F:\\Py3\\day1', 'F:\\Py3\\day1', 'F:\\pycharm\\PyCharm 2020.3.5......',......]
  1. 获取当前解释器版本信息

print(sys.version)  # 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]
  1. 获取平台信息

print(sys.platform)  # win32
  1. 自定义命令操作

cmd终端可以使用Windows+r然后输入cmd唤起,也可以在pycharm直接使用快捷方式Terminal,模拟cmd并自动切换到当前执行文件所在的路径。我们可以在py文件做一些操作,然后进去Terminal,直接输入当前执行文件的名字。

# 进入Terminal之后,我们可以输入当前执行文件的名字,占一个长度,然后后面还可以跟两个长度进行操作
if len(sys.argv) == 3:
    username = sys.argv[1]
    password = sys.argv[2]
    if username == 'oscar' and password == '123':
        print('可以正常执行该文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')
else:
    print('请输入用户名和密码 不能漏写或多写')
# 也可以把上述代码转换成异常处理模式
try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('请输入用户名和密码 不能漏写或多写')
else:
    if username == 'oscar' and password == '123':
        print('可以正常执行该文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')

json模块

json是一个序列化模块,主要用于跨语言传输数据。它的底层原理:比如我们Python写的一些程序,获得一些数据,然后我们想要把数据传给一个用js主写的程序,但是呢Python支持的数据类型可能js就不支持,不支持就不会识别,所以就用到了我们的json模块,它可以把Python的数据类型转为json格式,然后由json格式转为js识别的数据类型,它在中间充当了一个翻译的角色。

json格式数据的具体特征

我们都知道基于网络传输数据都是二进制的,在Python中呢只有字符串可以转为二进制,为什么呢?因为在Python中bytes类型可以直接作为二进制,Python中只有字符串可以转为bytes类型,也就是编码(encode())。所以呢json格式的本质属于字符串类型,那它有什么具体的特征呢?来看:

import json
# 定义一个字符串
s = 'oscar'
print(s,type(s))  # oscar <class 'str'>
res = json.dumps(s)
print(res,type(res))  # "oscar" <class 'str'> 双引号就是json格式独有的特征
# 我们可以来看一下,对比一下
# 定义一个列表
l = ["oscar", "jason"]
print(l,type(l))  # ['oscar', 'jason'] <class 'list'> 这是一个一个列表,里面的元素是字符串,虽然是双引号,但实际上还是单引号
# 直接定义一个json格式
s1 = '"oscar"'
print(s1,type(s1))  # "oscar" <class 'str'>

序列化与反序列化

json.dumps():序列化,将Python数据类型转为json格式

json.loads():反序列化,将json格式转为对应的Python数据类型

# 假如我们有一个字典,基于网络发给另一个程序
d = {'name': 'oscar', 'age': 21}
res = json.dumps(d)  # 转为json格式,也就是序列化
res_bytes = res.encode('utf8')  # 进行编码
res_str = res_bytes.decode('utf8')  # 进行解码,这时候是一个json格式
res_dict = json.loads(res_str)  # 反序列化,转化为原来的格式
print(res_dict,type(res_dict))  # {'name': 'oscar', 'age': 21} <class 'dict'>

如果json模块需要配合文件一起使用的话,有固定的方法:

json.dump():将其他数据类型直接写入文件中(自动转json格式)

json.load():将文件数据自动转为对应的数据类型(自动反序列化)

# 假如我们有一个字典,写入文件中
d = {'name': 'oscar', 'age': 21}
with open(r'1.txt','w',encoding='utf8') as f:
    json.dump(d,f)  # 文件中的数据 {"name": "oscar", "age": 21}
with open(r'1.txt','r',encoding='utf8') as f1:
    res = json.load(f1)
    print(res,type(res))  # {'name': 'oscar', 'age': 21} <class 'dict'> 自动反序列化

注意:并不是所有的数据类型都支持序列化

Python类型 json格式
字典(dict) object
列表(list) array
元组(tuple) array
字符串(str) string
整型(int)、浮点型(float) number
布尔值(bool) true、false
None null

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'))  # # 获取错误命令执行之后的结果

这里是IT小白陆禄绯,欢迎各位大佬的指点!!!

posted @ 2022-03-30 19:51  陆禄绯  阅读(38)  评论(0)    收藏  举报