目录

今日内容详细

作业讲解

使用random模块编写一个能够产生随机验证码的代码

# 写代码之前一定先理清大致思路
import random def get_code(n):
# 定义一个空字符用于存储验证码
code = ''
# 1.先写一个固定产生五位的随机验证码(每一位都应该是三选一)
for i in range(n): # 括号内写几就会产生几位验证码
# 随机产生一个数字
random_int = str(random.randint(0, 9)) # 整型无法与字符串相加 所以转成字符串
# 随机产生一个小写字母
random_lower = chr(random.randint(97, 122)) # chr方法给数字 依据ASCII码返回对应的字符
# 随机产生一个大写字母
random_upper = chr(random.randint(65, 90))
# 三选一
temp = random.choice([random_int, random_lower, random_upper])
# 拼接字符串
code += temp
# print(code) # 最好不要是打印操作 而是返回值
return code res = get_code(4) # 0xM0
res1 = get_code(10) # AoUWE4Kfqt

os模块

os模块是与操作系统交互的一个接口

import os

该模块主要是跟操作系统打交道

知识点进修

创建目录(文件夹)

os.mkdir(r'aaa')  # 使用相对路径 在当前执行文件所在的路径下创建一个aaa文件夹

os.mkdir(r'bbb/ccc')  # mkdir只能创建单级目录

os.makedirs(r'ccc')  # makedirs可以创建单级目录

os.makedirs(r'bbb/ccc/ddd')  # makedirs支持创建多级目录

删除目录(文件夹)

os.rmdir(r'aaa')  # 可以删除单级目录

os.rmdir(r'bbb')  # 只能删空的单级目录

os.removedirs(r'ccc')  # 可以删除单级目录

os.removedirs(r'/Users/MSI/PycharmProjects/day21/bbb/ccc/ddd')  # 删除目录之后如果外层的目录也是空的则继续删除

查看某个路径下所有的文件名称(文件、文件夹)

# 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.listdir()) print(os.listdir(r'/Users'))

删除文件、重命名文件

os.remove(r'a.txt')  # 删除

os.rename(r'a.txt', r'aaa.txt')  # 重命名

获取当前路径、切换路径

# 获取当前工作目录,即当前python脚本工作的目录路径
print(os.getcwd())
os.chdir(r'/Users/jiboyuan')
print(os.getcwd())

软件开发目录规范 启动脚本兼容性操作

os.path.dirname(__file__)  # 动态获取当前执行文件所在的绝对路径       D:\day21

os.path.dirname(os.path.dirname(__file__))  # 每嵌套一层就是往上切换一层  D:\

print(os.path.abspath(__file__))  # 动态获取当前执行文件自身的路径     D:\day21\a.py

判断文件是否存在

print(os.path.exists(r'ATM'))  # True  判断所给的路径是否存在

print(os.path.exists(r'01 作业讲解.py'))  # True  判断所给的路径是否存在

print(os.path.isdir(r'ATM'))  # True  判断路径是否是一个文件夹

print(os.path.isdir(r'01 作业讲解.py'))  # False  判断路径是否是一个文件夹

print(os.path.isfile(r'ATM'))  # False  判断路径是否是一个文件

print(os.path.isfile(r'01 作业讲解.py'))  # True  判断路径是否是一个文件

拼接路径(极容易忽略)

base_dir = 'ATM'
exe_dir = '01 作业讲解.py'
'''拼接成py文件的路径'''
print(base_dir + '/' + exe_dir) # 路径分隔符在不同的系统下是不一样的 使用加号的话兼容性极差
res = os.path.join(base_dir, exe_dir) # 能够自动识别当前操作系统的分隔符
print(res)

获取文件大小(字节 bytes)

print(os.path.getsize(r'ATM'))  # 128bytes
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模块是与python解释器交互的一个接口

import sys

知识点进修

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

# 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
print(sys.path)

获取解释器版本信息

# 获取Python解释程序的版本信息
print(sys.version)

获取平台信息

#  返回操作系统平台名称
print(sys.platform)

退出程序

# 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.exit(n)
异常处理和status
import sys
try:
sys.exit(1)
except SystemExit as e:
print(e)

自定义命令行操作

# 命令行参数List,第一个元素是程序本身路径
print(sys.argv)
知识点巩固

模拟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('请输入用户名和密码 不能漏写或多写')
'''
cmd终端可以使用windows+r并输入cmd唤起
也可以在pycharm直接使用快捷方式Terminal
'''
异常捕获形式
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格式数据是不同编程语言之间数据交互的媒介

json格式数据的具体特征

'''
数据基于网络传输肯定是二进制格式
在python中bytes类型的数据可以直接看成是二进制数据
python中只有字符串可以转成bytes类型(编码encode())
''' # 由上述推论可知 json格式数据 本质应该属于字符串类型

双引号是json格式数据独有的标志符号

import json

d = {'username':'jason','pwd':123}
print(d, type(d)) # {'username': 'jason', 'pwd': 123} <class 'dict'> res = json.dumps(d)
print(res, type(res)) # {"username": "jason", "pwd": 123} <class 'str'>
print(str(d),type(str(d))) # {'username': 'jason', 'pwd': 123} <class 'str'> '''双引号是json格式数据独有的标志符号''' d = {"username":"jason","pwd":123}
print(d) # {'username': 'jason', 'pwd': 123} 不是 res1 = '{"username":"jason","pwd":123}'
print(res1) # {"username":"jason","pwd":123} 算json格式

json模块具体操作

json的序列化和反序列化

"""
json.dumps() 序列化
将python数据类型转换成json格式字符串
json.loads() 反序列化
将json格式字符串转换成对应的数据类型
"""
d = {'username':'jason','pwd':123}
res = json.dumps(d)
print(res, type(res)) # json格式字符串
encode_str = res.encode('utf8') '''假设将该字符串基于网络发给了另外一个python程序''' # 先将bytes类型转换成字符串
json_str = encode_str.decode('utf8')
print(json_str,type(json_str))
res1 = json.loads(json_str)
print(res1, type(res1)) # {'username': 'jason', 'pwd': 123} <class 'dict'>

如果不能理解跨语言传输的作用 那么权且理解下面的操作即可

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))

json模块配合文件使用的固定方法

"""
如果json模块需要配合文件一起使用的话 有固定的方法
json.dump()
将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
将文件数据直接转成对应的数据类型(自动反序列化)
"""

不是所有的数据类型都支持序列化

# 强调:不是所有的数据类型都支持序列化

"""

    +-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+ """

pickle模块

pickle模块是一个序列化模块,用于python特有的类型 和 python的数据类型间进行转换

pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)

# 但是基本不用
因为它不支持跨语言传输 只能识别python代码 '''
推荐使用json模块。
json是一种所有的语言都可以识别的数据结构。比如我们将一个字典或者序列化成了一个json存在文件里,那么java代码或者js代码也可以拿来用。
但如果我们用pickle进行序列化,其他语言就不能读懂这是什么了~
'''

subprocess模块

import subprocess

作用

"""
该模块可以实现远程操作其他计算机的功能
动态获取命令执行并返回结果
eg:类似于Xshell软件的功能
"""

代码展示

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

python学习Day21的更多相关文章

  1. python学习 day21 (3月28日)----(抽象类 多态 nametuple dump)

    不要因为走的路太久了,而忘记了为了什么而出发. 提前作准备了吗?把思维导图的东西做了吗? 和工作了几年的人,相比,是不是相同的水平,如果要写简历的话. 一边学习,一边复习. 小就是大,少就是多. 1. ...

  2. python学习day21 面向对象(三)嵌套/特殊方法

    1.嵌套 类/方法/对象都可以当做变量或嵌套到其他类型中. 函数的参数可以是任意类型. 可哈希(不可变)数据类型可以做字典的key. 类和对象可以做字典的key. 2.特殊方法(8) __init__ ...

  3. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  4. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  5. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  6. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  7. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  8. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  9. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

随机推荐

  1. [MRCTF]XOR-无法生成反汇编的处理

    主程序,无法生成伪代码 由此分为两种方法即: 直接看反汇编 解决问题,尝试生成伪代码 硬啃汇编 输入与输出 判断输入长度是否为0x1B,其中al为eax的低8位 将输入的字符每个与当前字符所在下标异或 ...

  2. 实验:zk master宕机后,临时节点在新的master上是否存在,结果出人意料

    一.实验 实验说明:3台zk集群,主要验证:master上的客户端,在master上建立临时节点,当master宕机时,其他follower选为主后,临时节点是否存在. 主要是通过此来验证,基于zk的 ...

  3. Hibernate实体的三种状态是什么?各有什么特点?

    瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value ...

  4. 描述一下 JVM 加载 class 文件的原理机制?

    JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的 类加载器是一个重要的 Java 运行时系统组件,它负责在运行时查找和装入类文件 中的类. 由于 Java 的 ...

  5. Zookeeper Watcher 机制 -- 数据变更通知 ?

    Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务 端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通 知来实现分布式的通知功 ...

  6. Netty学习摘记 —— 初步认识Netty核心组件

    本文参考 我在博客内关于"Netty学习摘记"的系列文章主要是对<Netty in action>一书的学习摘记,文章中的代码也大多来自此书的github仓库,加上了一 ...

  7. #define的3种用法详解

    1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为"宏".被定义为"宏"的标识符称为"宏名".在编译 ...

  8. 探讨:微信小程序应该如何设计

    微信小程序公测后,开发者非常热情,都有很高的期待,都想抓住这一波红利.但是热情背后需要冷静,我们需要搞清楚两个问题: 微信想要我们做什么?微信小程序可以做什么? 微信想要我们做什么? 首先来弄清楚微信 ...

  9. 体验js之美第八课-面向对象创建和继承终结篇

    概述 到这里我们讲说js面向对象的系列部分的最后一个课程,面向对象必须掌握两个东西一个是对象的创建一个是继承.这节课我们重点说说这两个问题最后我们说下在ES6里面面向对象怎么玩. 1对象的创建 我们第 ...

  10. Muse UI遇到的坑

    写在前面:我只是一个前端小白,文章中的提到可能会有不足之处,仅提供一个参考.若有不完善的地方,欢迎各位大佬指出,希望对你有帮助! 故事背景是这样的,最近做一个Vue项目,使用到 Muse UI 组件库 ...