一、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")
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ù)。