json模块 os模块 文件加密

一:random随机模块

import random

random 随机产生一个0-1之间的小数
print(random.random())  
结果:0.2726960869606466
    

randint 随机产生一个1-6之间的整数 掷骰子
print(random.randint(1,6))  


uniform 随机产生一个1-6之间的小数
print(random.uniform(1,6))  
结果:1.3550922201541318

    
choice 随机抽取一个
print(random.choice(['特等奖', '一等奖', '二等奖', '谢谢回顾', '再来一次']))

sample 随机抽取(尾部数量)指定样本量
print(random.sample(['安徽省', '江苏省', '山东省', '海南省', '广东省', '河南省'], 3))  

随机打乱容器类型中的诸多元素
l = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
random.shuffle(l)    随机打乱容器内元素
print(l)
结果:['K', 'J', 2, 6, 9, 'A', 10, 5, 'Q', 8, 4, 7, 3]

image

二:os模块

与操作系统打交道
import os

1.创建单层目(文件夹)一次只能创建一个文件夹

os.mkdir('XXX老师精品课程')

2.创建多级目录(文件夹)一次可以创建多个

os.makedirs(r'xxx视频合集\r老师视频作品\2021选集')

3.删除空目录(文件夹)

删除很有局限性 必须要空文件夹才可以,文件夹内没有数据才可以删除
os.rmdir(r'xxx视频目录')

4.删除多层目录

删除很有局限性 必须要空文件夹才可以,文件夹内没有数据才可以删除os.removedirs(r'xxx视频合集')

alis 别名 允许删除不记录
删除很有局限性 必须要空文件夹才可以,文件夹内没有数据才可以删除os.removedirs(r'xxx视频合集')

alis 别名 允许删除不记录

5.删除一个文件(不是文件夹)

os.remove('a.txt')

6.修改文件名称

os.rename('老文件名', '新文件名')

7.获取当前工作路径

print(os.getcwd())

8.切换路径

os.chdir('D:/')
with open(r'a.txt', 'wb') as f:
    pass

9.判断当前路径是否存在(任意类型)只判断路径是否存在

(os.path.exists('文件名'))
print(os.path.exists('a.txt'))

10.判断当前路径是否是文件(只判断文件)

(os.path.isfile('文件'))
print(os.path.isfile('rang.py'))​

11.判断当前路径是否是文件夹(只判断文件夹)

(os.path.isdir('文件夹'))
print(os.path.isdir('老师教学视频'))

12.获取文件大小(文件内多少KB,GB)就是字节数

print(os.path.getsize(r'a.txt'))

image

三:文件处理选择任意视频

获取当前文件所在的路径(可以嵌套 则为上一层路径)
BASE_DIR =os.path.dirname(__file__)
路径拼接(******) 能够自动识别不同操作系统分隔符问题(不同系统通用)
movie_dir = os.path.join(BASE_DIR,'老师教学视频')

用户选择想看的视频
列举出指定路径下的文件名称(任意类型文件)
data_movie_list = os.listdir('D:\计算机知识存储\os模块\老师教学视频')

循环
while True:
    循环 枚举默认加索引 从零开始
    for i, j in enumerate(data_movie_list):
        print(i+1, j)
    choice = input('请选择你想要看的文件编号:').strip()
    判断必须是纯数字
    if choice.isdigit():
        choice = int(choice)
        判断用户输入 在 范围 统计0-5之间
        if choice in range(len(data_movie_list)+1):
            获取编号对应的文件名称
            file_naem = data_movie_list[choice-1]

            拼接文件的完整路径(****)
            file_path = os.path.join(movie_dir,file_naem)   专门用于路径拼接 并且能够自动识别当前操作系统的路径分隔符
            利用文件操作读写文件
            with open(file_path, 'r',encoding='utf8') as f:
                print(f.read())

image

四:sys模块

主要与python解释器打交道

import sys

1.系统变量 系统路径
print(sys.path)

2.当前解释器版本
print(sys.version)

3.平台版本
print(sys.platform)

4.当前执行文件的路径(绝对路径)
print(sys.argv)

image

五:实现文件执行加密操作

实现文件执行加密操作
异常捕获
try:
    username = sys.argv[1]
    password = sys.argv[2]
    if username == 'jason' and password == '123':
        print('正常执行文件内容')
        print('洗脚按摩')
    else:
        print('错误')

except  Exception:
    print('请输入用户名和密码:')
    print('目前只能让您(游客模式)')
    
    
    加密操作:
    'D:\计算机知识存储\os模块\os模块.py    路径
    python 路径 用户密码

image

六:json 序列化模块

json格式数据:跨语言传输

import json

json跨语言传输

1.不同的语言之间做数据交互场景
2.将其他类型数据转换成字符串 将字符串转换成json格式 之后转换成二进制基于网络发送
3.在公司写程序都是前后端分离的 你写好一个程序之后 别的程序语言来调你 朝你要数据 这个时候通用的格式就是json格式

image

七:json序列化 反序列化

import json
d = {'username':'jason', 'pwd':123}


# 将其他数据类型转换成json格式字符串 是json格式字符串(序列化)
res = json.dumps(d)
双引号json格式字符串的标识
print(res,type(res))
结果:{"username": "jason", "pwd": 123}  双引号是json格式独有的

将json格式字符串转成当前语言对应的某个数据类型(反序列化)
将json格式 转换 回对应的某个类型形式
res1 = json.loads(res)
print(res1,type(res1))
结果:{'username': 'jason', 'pwd': 123}  单引号字典




比如说这个字符串是别人基于网络发给我的 这个字符串是个bytes类型
由于里面没有中文所有只加个b
bytes_data = b'{"username": "jason", "pwd": 123}'
# 将bytes类型转换成json格式类型
bytes_str = bytes_data.decode('utf8')
# 将json格式类型转换当前语言对应的某个数据类型
bytes_dict = json.loads(bytes_str)
print(bytes_dict, type(bytes_dict))
结果:{'username': 'jason', 'pwd': 123} <class 'dict'>

image

八:json 文件写读方式

暂且可以简单的理解为
    序列化就是将其他数据类型转换成字符串过程
        json.dumps()
    反序列化就是将字符串转换成其他数据类型
        json.loads()

九:dumps/loabs与dump/loab两者区别

1.dumps模式
d = {'username': 'jason', 'pwd':123}
  • 案例需求
1.只有字符串形式才能存放入文件
2.将字典存入文本文件 再取出来
所以:
可以用到 (序列化) 和 (反序列化)
# 将字典d写入文件    转成json格式字符串 (序列化)
with open(r'a.txt', 'w', encoding='utf8') as f:
  # 将其他数据类型转换成json格式字符串 是json格式字符串
    res = json.dumps(d)
  # 将转换成的字符串写入文件
    f.write(res)

  • 输出结果:
print(res)    结果:  {"username": "jason", "pwd": 123}
2.loads 读模式
# 将字典d读出来
with open(r'a.txt', 'r', encoding='utf8') as f1:
      # 将文件内数据读出赋值
    data = f1.read()
# 将json格式 转换 回对应的某个类型形式
res1 = json.loads(data)
  • 输出结果
print(res1,type(res1))   结果:  {'username': 'jason', 'pwd': 123}
3.dump 写模式
d = {'username': 'jaso', 'pwd':123}
# 写入字典
with open(r'a.txt', 'w', encoding='utf8') as f:
    # 将其他数据类型转换成json格式字符串 存入字典
    json.dump(d,f)

json.dump 写模式 将两步合为一步

4.load 读模式
读出字典
with open(r'a.txt', 'r', encoding='utf8') as f:
    将文件内数据读出赋值 将json格式 转换 回对应的某个类型形式
    res = json.load(f)
print(res,type(res))
  • load 读模式 将两步合为一步

十:load与loads区别

json.loads
# 将文件读出来
with open(r'a.txt', 'r', encoding='utf8') as f1:
作用:

1.先将文件内数据读出赋值
data = f1.read()
2. 将json格式 转换 回对应的某个类型形式
json.loads(data)

json.load
作用:

1.将文件内数据读出 将json格式 (反序列化)转换回对应的某个类型
json.load(f)
json在序列化的时候 如果你不符合ASCII
d1 = {'username': 'tony好帅哦 我好喜欢', 'pwd': 123,'hobby':[11,22,33]}
print(json.dumps(d1,ensure_ascii=False))

image

九:subprocess模块

import subprocess


1.可以基于网络连接上一台计算机(socket模块)
2.让连接上的计算机执行我们需要执行的命令
3.将命令的结果返回




这个方法可以帮你远程按操作一些机器了
基于网络可以远程操作
tasklist 查看计算机哪些程序在运行 像linux命令查看哪些程序在跑着
                subprocess.Popen('放要执行的命令')
res = subprocess.Popen('tasklist',
                       固定参数 True 固定的
                       shell=True,
                       产生的执行参数的结果 丢到这里面 stdout stderr 这里面管道的意思
                       产生之后 基于网络发给我
                       stdout=subprocess.PIPE,
                           产生的执行参数的结果 丢到这里面 stdout stderr 这里面管道的意思
                       产生之后 基于网络发给我
                       stderr=subprocess.PIPE
                       )

这个数据不支持 utf8
在国内的win电脑底层支持gbk
                stdout 拿正确的结果   read 读它      decode 解码
print('stdout', res.stdout.read().decode('gbk'))   获取正确命令执行之后的结果
                 stderr 拿错误的结果   只要不解码 就是二进制形势
print('stderr', res.stderr.read().decode('gbk'))   获取错误命令执行之后的结果

image

posted @ 2021-11-26 20:49  AlexEvans  阅读(90)  评论(0编辑  收藏  举报