一、Pickle简介:
- 把数据写入文件时,常规的文件方法只能把字符串对象写入。其他数据需先转换成字符串再写入文件
- Pickle可以将其他类型的数据写入文件,之后又可以把它完整无缺地取出来
补充:
- 常规方法写入数据,只能是字符串类型,其他类型无法写入,例如:int,字典,列表等类型;
pickle模块
可以在文件中存储任何类型的数据,也可以完整取出任何类型的数据;
二、Pickle模块常用函数:
分类 |
关键字 / 函数 / 方法 |
说明 |
模块 |
import pickle |
导入模块 |
|
pickle.dump(dict,fw) |
将Python数据类型转换为2进制并保存到 pickle 格式的文件内
dict :写入的文件地址
fw :写文件对象 |
|
pickle.load(dict) |
从pickle格式的文件中读取数据并转换为python的数据类型
dict :写入的文件地址 |
三、使用示例
import pickle
# 将其他类型的数据写入文件
list01 = [1, 2, "213", "he", {213: "23", "sad": 23}]
with open("/opt/list.data", mode="wb") as fw:
pickle.dump(list01, fw)
with open("/opt/list.data", mode="rb") as fr:
list_data = pickle.load(fr)
print(list_data)
四、练习:创建系统用户
需求:
- 编写一个程序(函数),实现创建用户的功能
- 提示用户输入 用户名
- 随机生成 8位密码 (导入之前的模块文件)
- 创建用户并设置密码
- 将用户相关信息存储文件内,并打印
import pickle
import subprocess
import randpass as rp
def create_user(username, file_name):
result = subprocess.run(f'id {username} &> /dev/null', shell=True)
if result.returncode == 0:
print(f"用户{username}已存在,请重新输入!")
else:
# 随机生成8位密码
password = rp.get_pass()
print(f"您的用户名:{username},您的密码:{password}")
# 创建用户
subprocess.run(f"useradd {username}", shell=True)
# 设置密码
subprocess.run(f"echo {password} | passwd --stdin {username}", shell=True)
# 将用户相关信息存储文件
with open(file_name, mode="rb") as fr:
userdb = pickle.load(fr)
userdb[username] = password
with open(file_name, mode="wb") as fw:
pickle.dump(userdb, fw)
print("userdb:", userdb)
if __name__ == '__main__':
# 提示用户输入用户名
user = input("输入用户名:\n")
create_user(user, "/opt/user_db")
import random as rd
from string import digits as dg, ascii_letters as al
# 随机生成密码
def get_pass(pass_number=8):
passwd = "" # 最终密码
for item in range(pass_number):
# 密码拼接
passwd += rd.choice(dg + al)
return passwd
if __name__ == '__main__':
print(get_pass())