random、os、json模块
1.流程控制语句2.计算机基础3.编程语言介绍4.python语言介绍5.python解释下载与安装6.python知识补充+语法入门7.基本数据类型8.基本运算符9.用户交互 输入输出方法10.字符编码11.可变与不可变数据类型12.文件操作的基本流程13.文件的基本操作14.异常处理15.深浅拷贝16.函数定义和调用17.函数的调用18.名称空间和作用域19.装饰器20.迭代器和三元运算符21.模块与包
22.random、os、json模块
23.hashlib、time模块24.正则25.datetime、sys、logging模块26.正则re模块27.常用的内置函数28.初识面向对象29.面向对象进阶30.封装、继承、多态31.常用魔法方法和元类32.网络编程初识33.网络编程进阶34.并发编程之多进程35.并发编程之多线程36.并发编程之协程常用模块
1. random模块
1.1 随机小数字
# 1.默认区间的小数 random.random()
# 大大于0且小与1之间的小数
import random
data = random.random()
print(data) # 0.7412470737488398
# 2.生成指定区间小数random.uniform(起始值,终止值)
data = random.uniform(1,10)
print(data) # 3.7820168013687585
1.2 随机整数
# 1.随声生成区间整数
# random.randint(1,5)生成1到5之前的整数,包括1和5
import random
data = random.randint(1,5)
print(data) 3
# 2.随机区间奇偶数
# random.randrange(1, 10, 2) 随机1到10之前的奇数
data = random.randrange(1, 10, 2)
print(data) # 3
1.3 随机选择返回
# 1.随机返回一个
# random.choice(num_list)从num_list列表随机返回一个
import random
num_list = [1,2,3,4]
num = random.choice(num_list)
print(num) # 3
# 2.随机返回指定个数
# random.sample(num_list,2)从num_list里随机返回2个出来
import random
num_list = [1,2,3,4]
num = random.sample(num_list,2)
print(num) # 1,4
random练习
# 登录练习 : 大小写子母 + 数字混合 (指定个数)
# 登录的时候给一个验证码 ---> 输入正确的验证码才能登录成功
# 否则登录失败
def create_code(num):
# 声名一个空字符串
code = ''
# 循环拿随机数
for i in range(num):
#创建验证码
num_one = str(random.randint(0, 9))
letter_one = chr(random.randint(97, 122))
letter_two = chr(random.randint(65, 90))
# 组合验证码
data = random.choice([num_one,letter_one,letter_two])
code += data
return code
def login():
code = create_code(4)
new_code = input(f"{code}:")
if new_code != code:
print("验证码错误")
else:
print("登陆成功")
2. os模块
2.1 路径相关
# 路径操作
# 获取当前文件所在文件夹的路径,当前文件的上层路径
# os.path.dirname(__file__)
# /Users/chenxu/Documents/pythonProjects28/ATM
BASE_DIR = os.path.dirname(__file__)
# 获取当前文件的绝对路径
# os.path.abspath(path)
# /Users/chenxu/Documents/pythonProjects28/ATM/setting.py
abspath= os.path.abspath(__file__)
# 拼接路径
# os.path.join()
# /Users/chenxu/DocumentythonProjects28/ATM/database/pwd
PWD_DIR = os.path.join(DB_DIR, 'pwd')
# 判断当前路径是否存在
# os.path.exists(path)
exists = os.path.exists(p1)
# 切割路径
FILE_PATH = os.path.abspath(__file__)
# /Users/chenxu/Documents/pythonProjects28/day19/os模块.py
# 对路径进行切割,根据最后一个/切割,把模块明切割出来了 --- 切割成元组
file_path_list = os.path.split(FILE_PATH)
print(file_path_list)
# ('/Users/chenxu/Documents/pythonProjects28/day19', 'os模块.py')
# 获取结尾文件夹名
BASE_DIR = os.path.dirname(__file__)
FILE_PATH = os.path.abspath(__file__)
print(BASE_DIR) # /Users/chenxu/Documents/pythonProjects28/day19
print(FILE_PATH) # /Users/chenxu/Documents/pythonProjects28/day19/os模块.py
result = os.path.basename(BASE_DIR)
print(result) # day19
result = os.path.basename(FILE_PATH)
print(result) # os模块.py
# 判断当前路径是否是文件
BASE_DIR = /Users/chenxu/Documents/pythonProjects28/day19
FILE_PATH = /Users/chenxu/Documents/pythonProjects28/day19/os模块.py
print(os.path.isfile(BASE_DIR)) # False
print(os.path.isfile(FILE_PATH)) # True
# 判断当前路径是否是绝对路径
path_one = '/Users/chenxu/Documents/pythonProjects28/day19/os模块.py'
path_two = 'os模块.py'
print(os.path.isabs(path_one)) # True
print(os.path.isabs(path_two)) # False
# 判断当前文件夹路径是否存在或者是当前文件夹的父级文件夹是否存在
path_two = '/Users/chenxu/Documents/pythonProjects28/day19'
print(os.path.isdir(path_two)) # True
pat_one = '/Users/chenxu/Documents/pythonProjects28/day19/img'
pat_two = '/Users/chenxu/Documents/pythonProjects28/day19'
print(os.path.isdir(pat_one)) # True
print(os.path.isdir(pat_two)) # True
2.2 其他方法
# 创建单层文件夹
file_path = os.path.join(BASE_DIR, 'img')
# 创建文件夹
os.mkdir(file_path)
# 多层文件夹
file_path = os.path.join(BASE_DIR, 'img','girl')
# 创建多层文件夹
os.makedirs(file_path)
# 删除多级文件夹
# 若目录为空,则删除,并递归到上一级目录,
# 如若也为空,则删除,依此类推
file_path = os.path.join(BASE_DIR, 'img', 'girl')
os.removedirs(file_path) # OSError: [WinError 145] 目录不是空的。
# 删除单级文件夹(rmdir)
file_path = os.path.join(BASE_DIR, 'img', 'girl')
os.rmdir(file_path)
# 列出当前文件夹下的所有文件及文件夹(listdir)
print(os.listdir(BASE_DIR)) # ['os模块.py', 'random练习.py']
# 删除指定文件(remove)
file_path = os.path.join(BASE_DIR, 'img', 'girl', 'test.py')
os.remove(file_path)
# 删除指定文件夹 (非空文件夹和非空文件)
# listdir --》 拿到文件列表
file_path = os.path.join(BASE_DIR, 'img', 'girl')
file_list = os.listdir(file_path)
print(file_list) # ['test.py', 'demo.py', '.idea']
for path in file_list:
file_new_path = os.path.join(file_path, path)
# print(file_new_path)
if os.path.isfile(file_new_path):
# /Users/chenxu/Documents/pythonProjects28/day19/img/girl/demo.py
# /Users/chenxu/Documents/pythonProjects28/day19/img/girl/test.py
os.remove(file_new_path)
else:
# /Users/chenxu/Documents/pythonProjects28/day19/img/girl/.idea
os.rmdir(file_new_path)
# /Users/chenxu/Documents/pythonProjects28/day19/img/girl
os.rmdir(file_path)
3. json 模块
- 将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化
3.1 序列化方法(loads)
- 将json字符串转换为python对象
import json
json_str = '{"name":"serein","age":25}'
python_obj = json.loads(json_str)
print(python_obj, type(python_obj))
# {'name': 'serein', 'age': 25} <class 'dict'>
3.2 反序列化(dumps)
- 将Python对象转换为json字符串
import json
json_dict = {"name":"serein","age":25}
python_obj = json.dumps(json_dict)
print(python_obj, type(python_obj))
# {"name": "serein", "age": 25} <class 'str'>
3.3 写入文件
import json
data = { "name": "serein", "age": 18}
with open("data.json", "w") as json_file:
json.dump(python_obj, json_file)
# 指定参数编码(ensure_ascii)
import json
python_obj = {"name": "陈旭", "age": 25}
# 写文件时指定编码格式为 utf-8 ---> 这样在json文件中存储的中文才是正常的中文,否则是二进制数据
with open("data.json", "w",encoding='utf-8') as json_file:
# ensure_ascii=False 上面指定编码格式后需要将 默认使用 ascii 这个选项设置为否
json.dump(python_obj, json_file,ensure_ascii=False)
4. hashlib
4.1摘要算法
- Python的hashlib提供了常见的摘要算法
- 如MD5
- SHA1等等。
- 摘要算法又称哈希算法、散列算法。
- 它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)
import hashlib
#
# 原始字符串
old_data = 'hello world'
# 传进去的数据必须是二进制数据
# encode
old_data = old_data.encode('utf8')
md5 = hashlib.md5(old_data)
print(md5) # <md5 _hashlib.HASH object @ 0x1009ae610>
# 返回的16进制数据 hexdigest()
result = md5.hexdigest()
print(result) # 5eb63bbbe01eeed093cb22bb8f5acdc3
# 返回2进制的数据
resul_one = md5.digest()
print(resul_one) # b'^\xb6;\xbb\xe0\x1e\xee\xd0\x93\xcb"\xbb\x8fZ\xcd\xc3'
登陆注册案例
import hashlib
import json
# 登陆注册
# 保存数据u
def save_data(path, data, mode='w', encoding='utf8'):
with open(path, mode, encoding=encoding) as f:
json.dump(data, f)
# 摘要算法方法
def encry_password(data):
md5 = hashlib.md5(data.encode('utf8'))
return md5.hexdigest() # 十六进制的字符串
# 注册
def register():
username = input("请输入用户名:").strip()
password = input("请输入密码:").strip()
password = encry_password(password)
data = {'username': username, 'password': password}
save_data(path='user_pwd.json', data=data)
# 读取数据
def read_data(path):
with open(path, 'r', encoding='utf8')as f:
data = json.load(f)
return data
# 登陆
def login():
username = input("请输入用户名:").strip()
password = input("请输入密码:").strip()
password = encry_password(password)
path = 'user_pwd.json'
data = read_data(path)
print(data)
print(password)
if username in data.values():
if password == data['password']:
print('登陆成功')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)