美文网首页Python进阶pythonPython
Python模块·Pickle读写文件(不同类型)

Python模块·Pickle读写文件(不同类型)

作者: 技术老男孩 | 来源:发表于2023-01-10 10:20 被阅读0次

    一、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")
    
    • randpass生成随机密码类
    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())
    

    相关文章

      网友评论

        本文标题:Python模块·Pickle读写文件(不同类型)

        本文链接:https://www.haomeiwen.com/subject/qmmoqdtx.html