- 把数据写入文件时,常规的文件方法只能把字符串对象写入。其他数据需先转换成字符串再写入文件
- python 提供了一个标准的模块,称为 pickle。使用它可以在一个文件中 存储任何 python 对象,之后又可以把它完整无缺地取出来
-
常规方法写入数据,只能是字符串类型,其他类型无法写入,例如:int,字典,列表等类型;
-
pickle模块,可以在文件中存储任何类型的数据,也可以完整取出任何类型的数据;
主要方法
pickle.dump(obj, file)
将 Python 数据转换并保存到 pickle 格式的文件内
pickle.load(file)
从 pickle 格式的文件中读取数据并转换为 python 的类型
>>> f = open('/tmp/a.data', mode='wb') # 打开文件/tmp/a.data,以字节的方式写入
>>> user = {'name': 'tom', 'age': 20} # 定义字典user
>>> import pickle # 导入模块pickle,可以写入和取出不同类型的数据
>>> pickle.dump(user,f) # pickle.dump(), 将字典user, 写入到对象f中【/tmp/a.data】
>>> f.close() # 关闭打开的文件
>>> f = open('/tmp/a.data', mode='rb') # 打开文件/tmp/a.data,【以字节的方式读取】
>>> adict = pickle.load(f) # 取出对象f中【/tmp/a.data】所有数据,赋值给变量adict
>>> adict # 查看字典adict中内容
案例:修改登录注册程序
import pickle
import os
def write_dict():
# 如果该文件不存在,才去初始化
if os.path.exists("/tmp/user.data") == False:
userdb = {} # 用户存储用户信息
fw = open("/tmp/user.data", mode="wb")
pickle.dump(userdb, fw)
fw.close()
def register():
username = input("username:") # 接收用户从键盘输入的用户名
# 读取字典数据
fr = open("/tmp/user.data", mode="rb")
user = pickle.load(fr)
fr.close()
if username in user.keys():
print("用户名已存在")
else: # 用户名可用
password = input("password: ") # 提示用户输入密码
# 将用户信息添加到字典
user[username] = password
# 将修改后的user字典重新写入到文件当中
fw = open("/tmp/user.data", mode="wb")
pickle.dump(user, fw)
fw.close()
def login():
username = input("username:") # 接收用户从键盘输入的用户名
password = input("password:") # 用户输入的密码
# 读取字典数据
fr = open("/tmp/user.data", mode="rb")
user = pickle.load(fr)
fr.close()
if user.get(username) != password:
print("登陆失败")
else:
print("登陆成功")
def show_menu():
write_dict()
while True:
choice = input("1.register 2.login 3.退出 Please enter choice(1/2/3): ")
if choice not in ["1", "2", "3"]:
print("请正确输入(1/2/3)!!!!")
continue
elif choice == "3":
print("Byebye~")
break
elif choice == "1":
register() # 注册函数
else:
login() # 登陆函数
if __name__ == '__main__':
show_menu()