Python模塊·Pickle讀寫文件(不同類型)

一、Pickle簡(jiǎn)介:

  • 把數(shù)據(jù)寫入文件時(shí),常規(guī)的文件方法只能把字符串對(duì)象寫入。其他數(shù)據(jù)需先轉(zhuǎn)換成字符串再寫入文件
  • Pickle可以將其他類型的數(shù)據(jù)寫入文件,之后又可以把它完整無(wú)缺地取出來(lái)

補(bǔ)充:

  • 常規(guī)方法寫入數(shù)據(jù),只能是字符串類型,其他類型無(wú)法寫入,例如:int,字典,列表等類型;pickle模塊可以在文件中存儲(chǔ)任何類型的數(shù)據(jù),也可以完整取出任何類型的數(shù)據(jù);

二、Pickle模塊常用函數(shù):

分類 關(guān)鍵字 / 函數(shù) / 方法 說(shuō)明
模塊 import pickle 導(dǎo)入模塊
pickle.dump(dict,fw) 將Python數(shù)據(jù)類型轉(zhuǎn)換為2進(jìn)制并保存到 pickle 格式的文件內(nèi)
dict:寫入的文件地址
fw:寫文件對(duì)象
pickle.load(dict) 從pickle格式的文件中讀取數(shù)據(jù)并轉(zhuǎn)換為python的數(shù)據(jù)類型
dict:寫入的文件地址

三、使用示例

import pickle

# 將其他類型的數(shù)據(jù)寫入文件
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)

四、練習(xí):創(chuàng)建系統(tǒng)用戶

需求:

  • 編寫一個(gè)程序(函數(shù)),實(shí)現(xiàn)創(chuàng)建用戶的功能
  • 提示用戶輸入 用戶名
  • 隨機(jī)生成 8位密碼 (導(dǎo)入之前的模塊文件)
  • 創(chuàng)建用戶并設(shè)置密碼
  • 將用戶相關(guān)信息存儲(chǔ)文件內(nèi),并打印
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}已存在,請(qǐng)重新輸入!")
    else:
        # 隨機(jī)生成8位密碼
        password = rp.get_pass()
        print(f"您的用戶名:{username},您的密碼:{password}")
        # 創(chuàng)建用戶
        subprocess.run(f"useradd {username}", shell=True)
        # 設(shè)置密碼
        subprocess.run(f"echo {password} | passwd --stdin {username}", shell=True)

        # 將用戶相關(guān)信息存儲(chǔ)文件
        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生成隨機(jī)密碼類
import random as rd
from string import digits as dg, ascii_letters as al


# 隨機(jī)生成密碼
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())
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容