python DAY_10(1) 基本存储方式

学习内容:
1.对象持续化
2.python简单的存储方式
Tips:
1.对象持续化我们可以变通的把他理解为,我们将所需资源存入内存,在必要的时候可以调取它
2.常见存储方式
1)文本文件
2)pickle使用
3)shelve使用
4)数据库
5)ORM
由于还在学习基础内容,本次只针对前三个简单易行的方法

重点:
1.文本文件存储
1)在之前的课程已经学过,简单回顾一下
存文件1:with open(“wxj.txt”,“w”,encoding=“utf8”) as f
f.write(“123”)
f.close()
读文件2:
f=open(“wxj.txt”)

t=f.read()
print(t)
2)但是文本默认存入的是字符串格式
我们在读取列表等信息时很不方便,这时候引入eval的方法(eval将传输的内容转化为python表达式)
在同一文件,我们使用定义函数的方法实现功能
scores = [67, 78, 89, 90]

def write_inf():
with open(“123.txt”, “w”, encoding=“utf8”) as f
f.write(scores)

print(“写入完成”)
if name == “main”:
write_inf()
直接写入scores会报错,我们加上str(scores)
导入就不会报错了
def read_inf():
with open(“12.txt”, “r”, encoding=“utf8”) as f:
st1 = eval(f.read())
print(st1[0])
st1[0]=12
print(st1)
print(st1[0])

if name == “main”:
write_inf()
read_inf()
这样就完成读出,同时还可以修改列表的内容
完整代码如下:

def write_inf():
with open(“12.txt”, “w”, encoding=“utf8”) as f:
f.write(str(scores))
f.close()
print(“写入完成”)

def read_inf():
with open(“12.txt”, “r”, encoding=“utf8”) as f:
st1 = eval(f.read())
print(st1[0])
st1[0]=12
print(st1)
print(st1[0])

if name == “main”:
write_inf()
read_inf()
运行结果如下:
在这里插入图片描述
2.pickle操作
1)picke是个包,使用先导入
import pickle

person = {“name”: “tom”, “age”: 20}
s = pickle.dumps(person)
p = pickle.loads(s)
print§
运行结果如下:
在这里插入图片描述

注意:上出使用的是pickle.dumps()和pickle.loads()的操作
2)将内容写入二进制文件,pickle.dump()和pickle.load()的操作
import pickle

person = {“name”: “tom”, “age”: 20}
s = pickle.dump(person, open(“wxj_123.txt”, “wb”))
p = pickle.load(open(“wxj_123.txt”, “rb”))
print§
结果如下:
在这里插入图片描述

3.shelve操作,可以在类里面进行操作,可以给对象加上键值
import shelve

class Person:
def init(self, name, age):
self.name = name
self.age = age

def __repr__(self):
    return "此人的名字为:{0}".format(self.name)

def write_inf():
s = Person(“TOM”, 20)
db = shelve.open(“Person_inf”)
db[“s”] = s#加上关键字
db.close()
print(“写入完成”)

def read_inf():
s = shelve.open(“Person_inf”)
st = s[“s”]
print(st)#读取关键字的内容
print(st.name)
print(st.age)
s.close()

if name == “main”:
write_inf()
在这里插入图片描述
写入后会出现多个文件
我们调取read_inf()函数
结果如下
在这里插入图片描述

我们read_inf函数内更改调用后的st的内容,发现可以更改内容,shelve操作不改变输入的类型
在这里插入图片描述

发布了33 篇原创文章 · 获赞 0 · 访问量 700

猜你喜欢

转载自blog.csdn.net/soulproficiency/article/details/103942953