38.Python常用模块

1.随机

随机模块 random
方法:
.random()       随机产生 0 - 1 之间的小数
.randint(1,6)   随机产生 1 - 6 之间的整数
.uniform(1,6)   随机产生 1 - 6 这几件的小数
.choice([元素1, 元素2···]) 随机抽取一个元素
.sample([元素1, 元素2···], num) 抽取指定样本 num为几抽取几个数
.shuffle([元素1, 元素2···]) 随机打乱容器元素的排序
# 随机验证码5位
# 随机一位 小写 大写 数字 


import random

for i in range(5):
    num = chr(random.randint(48, 57))  # 数字
    # print(num)

    upper = chr(random.randint(65, 90))  # 大写
    # print(upper)

    lower = chr(random.randint(97, 122))  # 小写
    # print(lower)

    list1 = [num, upper, lower]
    print(random.choice(list1), end='')

2.系统操作

系统操作 os模块

2.1os方法

方法:
.mkdir('目录名')           创建单级别目录   不能xx/xxx   在当前程序运行目录下创建
.makedirs('目录名/目录名')      创建多级目录     可以xx/xxx
.rmdir('目录名')               删除目录      只能删空目录
.removedirs('目录名/目录名')    移除多级目录  只能删空目录
.listdir('路径')               列出当前目录下的文件/文件名  
.remove('文件路径')             移除一个文件
.rename('老文件名', '新文件名')  重命名
.getcwd()                      查看当前路径
.chdir('路径')                 切换路径   
import os

os.mkdir('aa')  # 在当前目录下创建名为aa的目录


os.makedirs(r'aa\bb\ccc')  # 多级目录

os.rmdir(r'aa')  # 只能删除空的文件夹 OSError: [WinError 145] 目录不是空的。: 'aa'
os.rmdir(r'aa\bb\ccc')  

os.removedirs('aa/bb')  # 删除多级空目录


print(os.listdir())  # ['.idea', '1.py'] 


# 手动创a.txt
os.remove('a.txt')

# 手动创aa文件夹. 重名 bb
os.rename('aa', 'bb')

# 获取当前目录
print(os.getcwd())  # F:\backups\notes\Project\test

# 切换目录
os.chdir(r'F:\backups\notes\Project\test\bb')
print(os.getcwd())  # F:\backups\notes\Project\test\bb

2.2path方法

.path下方法
.join('路径', '路径') 路径拼接 
	能自动识别当前系统的路径分隔符,linux /  windows \ '/也能用'
.exists('路径')   判断路径是否存在 
.isfile('路径')   判断路径是否为一个文件
.isdir('路径')    判断路径是否为一个目录
.getsize('路径')  获取文件大小  字节数 字母1字节 中文3字节
path1 = os.getcwd()
# 路径拼接
print(os.path.join(path1, 'bb'))  # F:\backups\notes\Project\test\bb

# 判断路径是否存在
print(os.path.exists(r'F:\backups\notes\Project\test\bb'))  # True

# 判断路径是否为一个文件
print(os.path.isfile(r'F:\backups\notes\Project\test\bb'))  # False

# 判断路径是否为一个目录
print(os.path.isdir(r'F:\backups\notes\Project\test\bb'))  # True

# 获取文件的字节数
print(os.path.getsize(r'F:\backups\notes\Project\test\1.py'))  # 282

2.3练习

import os

"""
创建一个文件夹
在穿件5个文件
展示文件,并绑定编号,选择编号查看文件信息。
"""

# 1.在当前的路径创建一个文件夹
file_name = input('创建文件\n输入文件的名字>>>:').strip()
os.mkdir(file_name)

# 2.在notes文件内创建5个文件
PATH_DIR = os.getcwd()

for i in ['a', 'b', 'c', 'd', 'e']:
    file_path = os.path.join(PATH_DIR, file_name, '%s.txt' % i)
    with open(file_path, mode='w', encoding='utf8') as f:
        f.write('%s 的文件内容' % i)

# 展示文件名字
file_path = os.path.join(PATH_DIR, file_name)
os.chdir(file_path)
all_file = os.listdir()
# 理由枚举做一个目录
for x, y in enumerate(all_file):
    print(x+1,  y)

while True:
    choice = input('选择文件观看>>>:').strip()
    # 输入的是数字
    if choice.isdigit():
        # 转数字
        choice = int(choice) - 1
        # 输入是否为 1-6 -1 就是 0-5  range(6) -->0 -5
        if choice in range(len(all_file)):
            read_file_name = all_file[choice]
            file_path = os.path.join(PATH_DIR, file_name, read_file_name)
            with open(file_path, mode='r', encoding='utf8') as f:
                print(f.read())
        else:
            print('选项不存在!')
    else:
        print('输入不合法!')

3.解释器操作

解释器操作 sys模块
.path  python导入文件或者模块查找的路径
	sys.path的第一个目录就是运行的stat.py所在的目录
	

.version 解释器版本	
	
.platform 返回系统标识  
	window --> ’win32‘
     linux  --> ’linux‘
     Mac OS --> ‘darwin’
    Windows/Cygwin-->  ‘cygwin’

.argv 获取当前执行文件的绝对路径 
import sys
print(sys.argv)  # ['F:/backups/notes/Project/test/1.py']
print(sys.version)  # 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]
print(sys.platform) # win32
print(sys.argv)  # 获取当前执行文件的绝对路径
print(sys.argv[0]) 
sys.argv == sys.argv[0]
1 开始就是一个列表
sys.argv == sys.argv[1] 从一开始都是如果有值这会获取输入的第一个字符组  空格分割
sys.argv == sys.argv[2] 获取第二个值

模拟mysql 的登入
在交互环境下使用
python3 D:\13600\Desktop\test.py kid 123

image-20211126192805946

import sys

try:
    username = sys.argv[1]  # 获取第一个值 kid
    password = sys.argv[2]  # 获取第二个值 123
    if username == 'kid' and password == '123':
        print('正常执行文件内容')
    else:
        print('用户名或密码错误')
except Exception:
    print('请输入用户名和密码')
    print('(游客模式)')

4.远程操作

subprocess模块远程操作工具


方法
.Popen('dos命令', 给参数赋值)

结果是bytes类型数据,基于网络传输远程控制,需要对数据进制传输。
在中国的 windows系统 电脑内部编码是 gbk编码 文件是utf-8 但是系统内部又不一样。
ps:
tasklist 查看进程  正在执行的程序 
net stop 服务名称  管理器权限执行 --> 停止xxx服务
C:\Users\13600>tasklist

映像名称                       PID 会话名                    会话#       内存使用
System Idle Process              0 Services                   0          8 K
System                           4 Services                   0        148 K
Registry                       148 Services                   0     27,128 K
···
import subprocess

res = subprocess.Popen('tasklist',
                       stdout=subprocess.PIPE,  # 收集命令执行后正确的结果
                       stderr=subprocess.PIPE  # 收集命令执行后错误的结果

                       )
"""
stdout: Optional[_FILE] = ...,
stderr: Optional[_FILE] = ...,
"""

# print('stdout', res.stdout.read())  # stdout b'\r\n\xd3\xb3\xcf\xf1\xc3\xfb\xb3\xc6 bytes 类型数据
# print('stderr', res.stderr.read())  # stderr b'' 没错就没值
data = res.stdout.read()

# 解码 
print(data.decode('gbk')) 
"""
映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          8 K
System                           4 Services                   0        148 K
"""

Guess you like

Origin blog.csdn.net/qq_46137324/article/details/121567416